home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / functions.s < prev    next >
Text File  |  2001-01-29  |  87KB  |  4,084 lines

  1. ;; Inlines
  2. ;; Table
  3. INLINETAB:
  4.     DC.L    .E,INL_MUL,INL_DIV,.E,.E,.E,.E,.E,.E,.E   ; 0-9
  5.     DC.L    .E,.E,INL_LONG,INL_INT,INL_CHAR,INL_PLONG,INL_PINT,INL_PCHAR,.E,INL_CLEANUP   ; 10-9
  6.     DC.L    .E,.E,INL_AND,INL_OR,INL_NOT,.E,.E,.E,.E,.E   ; 20-9
  7.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,.E,.E   ; 30-9
  8.     DC.L    .E,.E,.E,.E,.E,.E,.E,INL_MOUSEX,INL_MOUSEY,.E   ; 40-9
  9.     DC.L    .E,.E,.E,.E,.E,.E,.E,INL_EVEN,INL_ODD,INL_EVAL   ; 50-9
  10.     DC.L    .E,.E,.E,INL_ABS,INL_SHL,INL_SHR,.E,.E,.E,.E   ; 60-9
  11.     DC.L    .E,.E,.E,.E,.E,INL_MSGCODE,INL_MSGQUAL,INL_MSGIADR,.E,INL_RNDQ   ; 70-9
  12.     DC.L    INL_MOD,INL_EOR,.E,.E,.E,.E,.E,.E,.E,.E   ; 80-9
  13.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,INL_FABS,INL_FFLOOR   ; 90-9
  14.     DC.L    INL_FCEIL,INL_FSIN,INL_FCOS,INL_FTAN,INL_FEXP,INL_FLOG,INL_FPOW,INL_FSQRT,INL_FLOG10,.E   ; 100-9
  15.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,INL_CAR,INL_CDR   ; 110-9
  16.     DC.L    .E,.E,INL_FATAN,INL_FSINCOS,INL_FSINH,INL_FCOSH,INL_FTANH,INL_FTIEEE,INL_FFIEEE,INL_FASIN   ; 120-9
  17.     DC.L    INL_FACOS,.E,.E,.E,.E,.E,.E,.E,.E,.E   ; 130-9
  18.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,.E,.E   ; 140-9
  19.     DC.L    .E,.E,.E,INL_GETA4,.E,INL_LSL,INL_LSR,.E,.E,.E   ; 150-9
  20.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,.E,.E   ; 160-9
  21.     DC.L    .E,.E,.E,.E,.E,.E,.E,.E,.E,.E   ; 170-9
  22. ;; ERROR
  23. .E:
  24.     JMP     ERROR0
  25. ;*-*
  26. ;*-*
  27. ;; GetA4
  28. INL_GETA4:
  29.     tst.l   LIBINFO
  30.     BEQ .1
  31.     JMP ERROR86
  32. .1:
  33.     MOVE.W  #$2879,(a4)+
  34.     MOVE.L  A4STORAGEADR(PC),D0
  35.     BEq ERROR89
  36.     JSR     FORCEABSHERE
  37.     RTS
  38. ;*-*
  39. ;; Long
  40. INL_LONG:
  41.     MOVE.L  A4,-(A7)
  42.     MOVE.W  #8,EAREQUEST
  43.     JSR     EAEXP
  44.     tst.l   d0
  45.     bne     .O
  46.     move.w  .C,(a4)+
  47. .O:
  48.     MOVe.L  (A7)+,a0
  49.     move.l  a4,d0
  50.     sub.l   a0,d0
  51.     cmp.l   #2,d0
  52.     beq     .O2
  53.     cmp.l   #4,d0
  54.     beq     .O4
  55.     cmp.l   #6,d0
  56.     beq     .O6
  57. .NO:MOVE.W  #$2010,(a4)+
  58.     RTS
  59. .O2:cmp.w   #$91c8,(a0)
  60.     bne     .NO
  61.     move.l  #$20380000,(a0)+
  62.     bra     INL_OPTI
  63. .O4:cmp.w   #$307c,(a0)
  64.     bne     .O41
  65.     move.w  #$2038,(a0)+
  66.     addq.l  #2,a0
  67.     bra     INL_OPTI
  68. .O41:
  69.     move.w  (a0),d0
  70.     and.l   #$FFF8,d0
  71.     cmp.w   #$41e8,d0
  72.     bne     .O42
  73.     move.w  (a0),d0
  74.     and.l   #$7,d0
  75.     or.w    #$2028,d0
  76.     move.w  d0,(a0)+
  77.     addq.l  #2,a0
  78.     bra     INL_OPTI
  79. .O42:
  80.     cmp.w   #$41fa,(a0)
  81.     bne     .NO
  82.     move.w  #$203a,(a0)+
  83.     addq.l  #2,a0
  84.     bra     INL_OPTI
  85. .O6:cmp.w   #$207c,(a0)
  86.     bne     .O61
  87.     move.w  #$2039,(a0)+
  88.     addq.l  #4,a0
  89.     bra     INL_OPTI
  90. .O61:
  91.     cmp.w   #$41f9,(a0)
  92.     bne     .NO
  93.     move.w  #$2039,(a0)+
  94.     addq.l  #4,a0
  95.     bra     INL_OPTI
  96. .C: move.l  d0,a0
  97. ;*-*
  98. ;; Int
  99. INL_INT:
  100.     MOVEQ   #$40,D0
  101.     BSR     EA_GETEXP
  102.     MOVE.W  #$3010,(a4)+
  103.     move.w  #$48C0,(A4)+
  104.     RTS
  105. ;*-*
  106. ;; Char
  107. INL_CHAR:
  108.     MOVEQ   #$40,D0
  109.     BSR     EA_GETEXP
  110.     MOVE.W  #$1010,(a4)+
  111.     BSR     EXP_EXTD0
  112.     RTS
  113. ;*-*
  114. ;; Mul
  115. INL_MUL:
  116.     MOVE.W  #16,EAREQUEST
  117.     JSR     EAEXP
  118.     tst.l   d0
  119.     bne     .O
  120.     move.w  .C,(a4)+
  121. .O: CMP.W   #COM,(A3)+
  122.     BEQ     .1
  123.     JMP     ERROR5
  124. .1:
  125.     JSR     EXP
  126. .O2:mOVE.L  #$4C1F0c00,(a4)+    ; MULS.L    (A7)+,D1:D0
  127.     RTS
  128. .C: move.l  d0,-(a7)
  129. .C2:move.l  d0,d1
  130. ;*-*
  131. ;; Div
  132. INL_DIV:
  133.     MOVE.W  #16,EAREQUEST
  134.     JSR     EAEXP
  135.     tst.l   d0
  136.     bne     .O
  137.     move.w  .C,(a4)+
  138. .O: CMP.W   #COM,(A3)+
  139.     BEQ     .1
  140.     JMP     ERROR5
  141. .1:
  142.     move.w  #2,EAREQUEST
  143.     JSR     EAEXP
  144.     tst.l   d0
  145.     bne     .O2
  146.     move.w  .C2,(a4)+
  147. .O2:move.w  #$201f,(a4)+
  148.     move.l  #$5bc149c1,(a4)+    ; SMI D1; EXTB.L D1
  149.     MOVE.L  #$4C420C01,(a4)+    ; DIVS.L  D2,D1:D0
  150.     RTS
  151. .C: move.l  d0,-(a7)
  152. .C2:move.l  d0,d2
  153. ;*-*
  154. ;; And
  155. INL_AND:
  156.     move.w  #16,EAREQUEST
  157.     jsr     EAEXP
  158.     tst.l   d0
  159.     bne     .O
  160.     move.w  .C,(a4)+
  161. .O: CMP.W   #COM,(A3)+
  162.     BEQ     .1
  163.     JMP     ERROR5
  164. .1:
  165.     jsr     EXP
  166.     MOVE.W  #$C09f,(A4)+        ; AND.L     D1,D0
  167.     RTS
  168. .C: move.l  d0,-(a7)
  169. ;*-*
  170. ;; Or
  171. INL_OR:
  172.     move.w  #16,EAREQUEST
  173.     JSR     EAEXP
  174.     tst.l   d0
  175.     bne     .O
  176.     move.w  .C,(a4)+
  177. .O: CMP.W   #COM,(A3)+
  178.     BEQ     .1
  179.     JMP     ERROR5
  180. .1:
  181.     JSR     EXP
  182.     MOVE.W  #$809f,(A4)+        ; OR.W      (a7)+,D0
  183.     RTS
  184. .C: move.l  d0,-(a7)
  185. ;*-*
  186. ;; Not
  187. INL_NOT:
  188.     JSR     EXP
  189.     MOVE.W  #$4680,(A4)+        ; NOT.L     D0
  190.     RTS
  191. ;*-*
  192. ;; PutLong
  193. INL_PLONG:
  194.     move.w  #16,EAREQUEST
  195.     JSR     EAEXP
  196.     tst.l   d0
  197.     bne     .O
  198.     move.w  .C,(a4)+
  199. .O: CMP.W   #COM,(A3)+
  200.     BEQ     .1
  201.     JMP     ERROR5
  202. .1:
  203.     jsr     EXP
  204.     MOVE.W  #$205f,(A4)+        ; move.l    (a7)+,a0
  205.     MOVE.W  #$2080,(A4)+        ; MOVE.L    D0,(A0)
  206.     RTS
  207. .C: move.l  d0,-(a7)
  208. ;*-*
  209. ;; PutInt
  210. INL_PINT:
  211.     move.w  #16,EAREQUEST
  212.     JSR     EAEXP
  213.     tst.l   d0
  214.     bne     .O
  215.     move.w  .C,(a4)+
  216. .O: CMP.W   #COM,(A3)+
  217.     BEQ     .1
  218.     JMP     ERROR5
  219. .1:
  220.     jsr     EXP
  221.     MOVE.W  #$205f,(A4)+
  222.     MOVE.W  #$3080,(A4)+        ; MOVE.W    D0,(A0)
  223.     RTS
  224. .C: move.l  d0,-(a7)
  225. ;*-*
  226. ;; PutChar
  227. INL_PCHAR:
  228.     move.w  #16,EAREQUEST
  229.     JSR     EAEXP           ; MOVE.L    D0,-(A7)
  230.     tst.l   d0
  231.     bne     .O
  232.     move.w  .C,(a4)+
  233. .O: CMP.W   #COM,(A3)+
  234.     BEQ     .1
  235.     JMP     ERROR5
  236. .1:
  237.     jsr     EXP
  238.     MOVe.W  #$205F,(a4)+        ; MOVE.L    (A7)+,A0
  239.     MOVE.W  #$1080,(A4)+        ; MOVE.B    D0,(A0)
  240.     RTS
  241. .C: move.l  d0,-(a7)
  242. ;*-*
  243. ;; Eor
  244. INL_EOR:
  245.     move.w  #16,EAREQUEST
  246.     JSR     EAEXP
  247.     tst.l   d0
  248.     bne     .O
  249.     move.w  .C,(a4)+
  250. .O: CMP.W   #COM,(A3)+
  251.     BEQ     .1
  252.     JMP     ERROR5
  253. .1:
  254.     JSR     EXP
  255.     MOVE.l  #$221fB380,(A4)+        ; EOR.L     D1,D0
  256.     RTS
  257. .C: move.l  d0,-(a7)
  258.  
  259. ;*-*
  260. ;; Eval
  261. INL_EVAL:
  262.     move.w  #8,EAREQUEST
  263.     JSR     EAEXP
  264.     tst.l   d0
  265.     bne     .O
  266.     move.w  .C,(a4)+
  267. .O: MOVE.W  #$4E90,(A4)+        ; JSR       (A0)
  268.     RTS
  269. .C: move.l  d0,a0
  270. ;*-*
  271. ;; Even
  272. INL_EVEN:
  273.     JSR     EXP
  274.     move.l  #$02000001,(a4)+
  275.     move.w  #$57c0,(a4)+
  276.     jsr     EXP_EXTD0
  277.     RTS
  278. ;*-*
  279. ;; Odd
  280. INL_ODD:
  281.     JSR     EXP
  282.     move.l  #$02000001,(a4)+
  283.     move.w  #$56c0,(a4)+        ; SNE       D0
  284.     bsr     EXP_EXTD0
  285.     RTS
  286. ;*-*
  287. ;; Abs
  288. INL_ABS:
  289.     JSR     EXP
  290.     MOVE.L  #$4A806a02,(a4)+        ; TST.L D0/BPL *+2
  291.     MOVE.W  #$4480,(A4)+            ; NEG.L D0
  292.     RTS
  293. ;*-*
  294. ;; Shl
  295. INL_SHL:
  296.     move.w  #16,EAREQUEST
  297.     jsr     EAEXP
  298.     tst.l   d0
  299.     bne     .O
  300.     move.w  .C,(a4)+
  301. .O: CMP.W   #COM,(A3)+
  302.     BEQ     .1
  303.     JMP     ERROR5
  304. .1:
  305.     move.w  #1,EAREQUEST
  306.     jsr     EAEXP
  307.     tst.l   d0
  308.     bne     .O2
  309.     move.w  .C2,(A4)+
  310. .O2:MOVE.W  #$201F,(A4)+        ; MOVE.L    (A7)+,D0
  311.     MOVE.W  #$E3A0,(A4)+        ; ASL.L     D1,D0
  312.     RTS
  313. .C: move.l  d0,-(a7)
  314. .C2:move.l  d0,d1
  315. ;*-*
  316. ;; Shr
  317. INL_SHR:
  318.     move.w  #16,EAREQUEST
  319.     jsr     EAEXP
  320.     tst.l   d0
  321.     bne     .O
  322.     move.w  .C,(a4)+
  323. .O: CMP.W   #COM,(A3)+
  324.     BEQ     .1
  325.     JMP     ERROR5
  326. .1:
  327.     move.w  #1,EAREQUEST
  328.     jsr     EAEXP
  329.     tst.l   d0
  330.     bne     .O2
  331.     move.w  .C2,(A4)+
  332. .O2:MOVE.W  #$201F,(A4)+        ; MOVE.L    (A7)+,D0
  333.     MOVE.W  #$E2A0,(A4)+        ; ASR.L     D1,D0
  334.     RTS
  335. .C: move.l  d0,-(a7)
  336. .C2:move.l  d0,d1
  337. ;*-*
  338. ;; Mod
  339. INL_MOD:
  340.     move.w  #16,EAREQUEST
  341.     jsr     EAEXP
  342.     tst.l   d0
  343.     bne     .O
  344.     move.w  .C,(A4)+
  345. .O: CMP.W   #COM,(A3)+
  346.     BEQ     .1
  347.     JMP     ERROR5
  348. .1:
  349.     move.w  #2,EAREQUEST
  350.     jsr     EAEXP
  351.     tst.l   d0
  352.     bne     .O2
  353.     move.w  .C2,(A4)+
  354. .O2:mOVE.W  #$221F,(A4)+        ; MOVE.L    (A7)+,D1
  355.     move.l  #$5bc049c0,(a4)+    ; SMI D0; EXTB.L D0
  356.     MOVE.L  #$4C421C00,(a4)+    ; DIVS.L    D2,D0:D1
  357.     RTS                         ; D0=MODULO, D1=A/B
  358. .C: move.l  d0,-(a7)
  359. .C2:move.l  d0,d2
  360. ;*-*
  361. ;; CleanUp
  362. INL_CLEANUP:
  363.     jsr     EXP
  364.     move.l  #$2940ffe4,(a4)+
  365.     MOVE.L  #$206cFFE8,(A4)+
  366.     move.w  #$4ed0,(a4)+
  367.     RTS
  368. ;*-*
  369. ;; RndQ
  370. INL_RNDQ:
  371.     JSR     EXP
  372.     MOVE.L  #$D0806206,(A4)+        ; ADD.L D0,D0 / BHI.S *+8
  373.     MOVE.L  #$0A801d87,(A4)+        ; EORI.L    #$1d872b41,D0
  374.     MOVE.W  #$2b41,(A4)+
  375.     RTS
  376. ;*-*
  377. ;; MouseX
  378. INL_MOUSEX:
  379.     move.w  #8,EAREQUEST
  380.     jsr     EAEXP
  381.     tst.l   d0
  382.     bne     .O
  383.     move.w  .C,(a4)+
  384. .O: move.w  #$7000,(a4)+
  385.     MOVE.L  #$3028000E,(A4)+
  386. ;    move.w  #$48c0,(a4)+
  387.     RTS
  388. .C: move.l  d0,a0
  389. ;*-*
  390. ;; MouseY
  391. INL_MOUSEY:
  392.     move.w  #8,EAREQUEST
  393.     jsr     EAEXP
  394.     tst.l   d0
  395.     bne     .O
  396.     move.w  .C,(a4)+
  397. .O: move.w  #$7000,(a4)+
  398.     MOVE.L  #$3028000C,(A4)+
  399. ;    move.w  #$48c0,(a4)+
  400.     RTS
  401. .C: move.l  d0,a0
  402. ;*-*
  403.  
  404. ;; Fabs
  405. INL_FABS:
  406.     MOVEQ   #0,D0
  407.     BSR EA_GETEXP
  408.     MOVE.L  #$2C6CFFC8,(A4)+
  409.     MOVE.L  #$4EAEFFCA,(A4)+
  410.     RTS
  411. ;*-*
  412. ;; Floor
  413. INL_FFLOOR:
  414.     MOVEQ   #0,D0
  415.     BSR EA_GETEXP
  416.     MOVE.L  #$2C6CFFC8,(A4)+
  417.     MOVE.L  #$4EAEFFA6,(A4)+
  418.     RTS
  419. ;*-*
  420. ;; Fceil
  421. INL_FCEIL:
  422.     MOVEQ   #0,D0
  423.     BSR EA_GETEXP
  424.     MOVE.L  #$2C6CFFC8,(A4)+
  425.     MOVE.L  #$4EAEFFA0,(A4)+
  426.     RTS
  427. ;*-*
  428. ;; Fsin
  429. INL_FSIN:
  430.     MOVEQ   #0,D0
  431.     BSR EA_GETEXP
  432.     MOVE.L  #$2C6CFFC4,(A4)+
  433.     MOVE.L  #$4EAEFFDC,(A4)+
  434.     RTS
  435. ;*-*
  436. ;; Fcos
  437. INL_FCOS:
  438.     MOVEQ   #0,D0
  439.     BSR EA_GETEXP
  440.     MOVE.L  #$2C6CFFC4,(A4)+
  441.     MOVE.L  #$4EAEFFD6,(A4)+
  442.     RTS
  443. ;*-*
  444. ;; Ftan
  445. INL_FTAN:
  446.     MOVEQ   #0,D0
  447.     BSR EA_GETEXP
  448.     MOVE.L  #$2C6CFFC4,(A4)+
  449.     MOVE.L  #$4EAEFFD0,(A4)+
  450.     RTS
  451. ;*-*
  452. ;; Fexp
  453. INL_FEXP:
  454.     MOVEQ   #0,D0
  455.     BSR EA_GETEXP
  456.     MOVE.L  #$2C6CFFC4,(A4)+
  457.     MOVE.L  #$4EAEFFB2,(A4)+
  458.     RTS
  459. ;*-*
  460. ;; Flog
  461. INL_FLOG:
  462.     MOVEQ   #0,D0
  463.     BSR EA_GETEXP
  464.     MOVE.L  #$2C6CFFC4,(A4)+
  465.     MOVE.L  #$4EAEFFAC,(A4)+
  466.     RTS
  467. ;*-*
  468. ;; Fpow
  469. INL_FPOW:
  470.     MOVE.L  #$F00,D0            ; move.l    d0,-(a7)
  471.     BSR EA_GETEXP
  472.     JSR ASM_COMMA
  473.     MOVEQ   #0,D0
  474.     BSR EA_GETEXP
  475.     MOVE.W  #$221F,(A4)+        ; move.l    (a7)+,d1
  476.     MOVE.L  #$2C6CFFC4,(A4)+
  477.     MOVE.L  #$4EAEFFA6,(A4)+
  478.     RTS
  479. ;*-*
  480. ;; Fsqrt
  481. INL_FSQRT:
  482.     MOVEQ   #0,D0
  483.     BSR EA_GETEXP
  484.     MOVE.L  #$2C6CFFC4,(A4)+
  485.     MOVE.L  #$4EAEFFA0,(A4)+
  486.     RTS
  487. ;*-*
  488. ;; Flog10
  489. INL_FLOG10:
  490.     MOVEQ   #0,D0
  491.     BSR EA_GETEXP
  492.     MOVE.L  #$2C6CFFC4,(A4)+
  493.     MOVE.L  #$4EAEFF82,(A4)+
  494.     RTS
  495. ;*-*
  496. ;; Fatan
  497. INL_FATAN:
  498.     MOVEQ   #0,D0
  499.     BSR EA_GETEXP
  500.     MOVE.L  #$2C6CFFC4,(A4)+
  501.     MOVE.L  #$4EAEFFE2,(A4)+
  502.     RTS
  503. ;*-*
  504. ;; FsinCos
  505. INL_FSINCOS:
  506.     MOVE.L  #$F00,D0            ; move.l    d0,-(a7)
  507.     BSR EA_GETEXP
  508.     JSR ASM_COMMA
  509.     MOVEQ   #0,D0
  510.     BSR EA_GETEXP
  511.     MOVE.W  #$205F,(A4)+        ; move.l    (a7)+,A0
  512.     MOVE.L  #$2C6CFFC4,(A4)+
  513.     MOVE.L  #$4EAEFFCA,(A4)+
  514.     RTS
  515. ;*-*
  516. ;; FsinH
  517. INL_FSINH:
  518.     MOVEQ   #0,D0
  519.     BSR EA_GETEXP
  520.     MOVE.L  #$2C6CFFC4,(A4)+
  521.     MOVE.L  #$4EAEFFC4,(A4)+
  522.     RTS
  523.  
  524.  
  525.     MOVE.L  4(A7),D0
  526.     MOVE.L  -60(A4),A6
  527.     JSR 60(A6)
  528.     RTS
  529. ;*-*
  530. ;; FcosH
  531. INL_FCOSH:
  532.     MOVEQ   #0,D0
  533.     BSR EA_GETEXP
  534.     MOVE.L  #$2C6CFFC4,(A4)+
  535.     MOVE.L  #$4EAEFFbe,(A4)+
  536.     RTS
  537. ;*-*
  538. ;; FtanH
  539. INL_FTANH:
  540.     MOVEQ   #0,D0
  541.     BSR EA_GETEXP
  542.     MOVE.L  #$2C6CFFC4,(A4)+
  543.     MOVE.L  #$4EAEFFb8,(A4)+
  544.     RTS
  545. ;*-*
  546. ;; Ftieee
  547. INL_FTIEEE:
  548.     MOVEQ   #0,D0
  549.     BSR EA_GETEXP
  550.     MOVE.L  #$2C6CFFC4,(A4)+
  551.     MOVE.L  #$4EAEFF9A,(A4)+
  552.     RTS
  553. ;*-*
  554. ;; Fieee
  555. INL_FFIEEE:
  556.     MOVEQ   #0,D0
  557.     BSR EA_GETEXP
  558.     MOVE.L  #$2C6CFFC4,(A4)+
  559.     MOVE.L  #$4EAEFF94,(A4)+
  560.     RTS
  561. ;*-*
  562. ;; Fasin
  563. INL_FASIN:
  564.     MOVEQ   #0,D0
  565.     BSR EA_GETEXP
  566.     MOVE.L  #$2C6CFFC4,(A4)+
  567.     MOVE.L  #$4EAEFF8e,(A4)+
  568.     RTS
  569. ;*-*
  570. ;; Facos
  571. INL_FACOS:
  572.     MOVEQ   #0,D0
  573.     BSR EA_GETEXP
  574.     MOVE.L  #$2C6CFFC4,(A4)+
  575.     MOVE.L  #$4EAEFF88,(A4)+
  576.     RTS
  577. ;*-*
  578.  
  579. ;; MsgCode
  580. INL_MSGCODE:
  581.     MOVE.w  #$7000,(a4)+
  582.     move.l  #$302cffbc,(a4)+
  583.     RTS
  584. ;*-*
  585. ;; MsgQual
  586. INL_MSGQUAL:
  587.     move.w  #$7000,(a4)+
  588.     move.l  #$302cffbe,(a4)+
  589.     RTS
  590. ;*-*
  591. ;; MsgIaddr
  592. INL_MSGIADR:
  593.     MOVE.L  #$202cffb8,(a4)+
  594.     RTS
  595. ;*-*
  596.  
  597. ;; Car
  598. INL_CAR:
  599.     MOVEQ   #$40,D0
  600.     BSR EA_GETEXP
  601.     MOVE.W  #$2010,(a4)+
  602.     RTS
  603. ;*-*
  604. ;; Cdr
  605. INL_CDR:
  606.     MOVEQ   #$40,D0
  607.     BSR EA_GETEXP
  608.     MOVE.L  #$20280004,(a4)+
  609.     RTS
  610. ;*-*
  611.  
  612. ;; Lsl
  613. INL_LSL:
  614.     MOVE.L  #$F00,D0
  615.     BSR     EA_GETEXP
  616.     CMP.W   #COM,(A3)+
  617.     BEQ     .1
  618.     JMP     ERROR5
  619. .1:
  620.     MOVE.L  #$200,D0
  621.     BSR     EA_GETEXP
  622.     MOVE.W  #$201F,(A4)+        ; MOVE.L    (A7)+,D0
  623.     MOVE.W  #$E3A8,(A4)+        ; LSL.L     D1,D0
  624.     RTS
  625. ;*-*
  626. ;; Lsr
  627. INL_LSR:
  628.     MOVE.L  #$F00,D0
  629.     BSR     EA_GETEXP
  630.     CMP.W   #COM,(A3)+
  631.     BEQ     .1
  632.     JMP     ERROR5
  633. .1:
  634.     MOVE.L  #$200,D0
  635.     BSR     EA_GETEXP
  636.     MOVE.W  #$201F,(A4)+        ; MOVE.L    (A7)+,D0
  637.     MOVE.W  #$E2A8,(A4)+        ; LSR.L     D1,D0
  638.     RTS
  639. ;*-*
  640. ;; Inline - optimized version end
  641. INL_OPTI:
  642.     move.l  a0,a4
  643.     rts
  644. ;*-*
  645. ;*-*
  646.  
  647. ;; Patcher main
  648. PATCHER:
  649.     MOVEM.L D0-A6,-(A7)
  650.     LEA     EFUNCTAB,A6
  651.     LEA     PATCHES,A5
  652.     LEA     EFUNCFLAGSTAB,A3
  653. .LOOP:
  654.     CLR.W   .INL
  655.     MOVE.L  (A5)+,D0
  656.     BMI     .EXIT
  657.     SUBQ.L  #1,D0
  658.     MULU.W  #EFUNCENTRYSIZE,D0
  659.     LEA     0(A6,D0),A4             ; function to be patched
  660.     MOVE.L  (A5)+,D0
  661.     BTST    #31,D0
  662.     BEQ     .SK1
  663.     MOVE.W  #-1,.INL
  664.     BCLR    #31,D0
  665. .SK1:
  666.     LSL.W   #2,D0
  667.     MOVE.L  .OFFS(PC,D0.W),A2
  668.     JMP     (A2)
  669. .OFFS:
  670.     DC.L    .1,.2,.3,.4,.5,.6
  671. .1: MOVE.L  (A5)+,D0
  672.     CMP.W   OSVERSION,D0
  673.     BGT     .BAD
  674.     BRA     .CONT
  675. .2: MOVEQ   #0,D0
  676.     MOVE.W  ASMCPU,D0
  677.     AND.L   (A5)+,D0
  678.     BEQ     .BAD
  679.     BRA     .CONT
  680. .3: MOVE.L  (A5)+,D0
  681.     AND.W   EFPU,D0
  682.     BEQ     .BAD
  683.     BRA     .CONT
  684. .4: ADDQ.L  #4,A5
  685.     BTST    #7,CODEPREFS
  686.     BEQ     .BAD
  687.     BRA     .CONT
  688. .5: ADDQ.L  #4,A5
  689.     BTST    #6,CODEPREFS
  690.     BEQ     .BAD
  691.     BRA     .CONT
  692. .6: ADDQ.L  #4,A5
  693.     BRA     .CONT
  694. .BAD:
  695.     ADDQ.L  #8,A5
  696.     BRA     .LOOP
  697. .CONT:
  698.     TST.W   .INL
  699.     BEQ     .CONT2
  700.     BTST    #7,ICODEPREFS+3
  701.     BEQ     .BAD
  702. ;    MOVE.L  #I_CODEEND,4(A4)
  703. ;    MOVE.L  #I_CODEEND,8(A4)
  704.     MOVE.L  -12(A5),D0
  705.     BCLR    #31,D0
  706.     SUBQ.L  #1,D0
  707.     LSL.W   #2,D0
  708.     OR.L    #$100,0(A3,D0)
  709.     ADDQ.L  #8,A5
  710.     BRA     .LOOP
  711. .CONT2:
  712.     MOVE.L  (A5)+,4(A4)
  713.     MOVE.L  (A5)+,8(A4)
  714.     BRA     .LOOP
  715. .EXIT:
  716.     MOVEM.L (A7)+,d0-A6
  717.     RTS
  718. .INL:
  719.     DC.W    0
  720. ;*-*
  721.  
  722. ;;FUNCS
  723.  
  724. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  725. ;   ALL BUILDIN E FUNCTIONS                 ;
  726. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  727.  
  728. EFUNCFLAGSTAB:
  729.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ;  1-10
  730.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 11-20
  731.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 21-30
  732.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 31-40
  733.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 41-50
  734.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 51-60
  735.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 61-70
  736.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 71-80
  737.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 81-90
  738.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0001,$0001,$0001,$0001 ; 91-100
  739.     DC.l    $0001,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0000 ; 101-110
  740.     DC.l    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 111-120
  741.     DC.l    $0000,$0000,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002 ; 121-130
  742.     DC.l    $0002,$0004,$0004,$0004,$0004,$0004,$0004,$0004,$0004,$0004 ; 131-140
  743.     DC.l    $0004,$0000,$0000,$0000,$0000,$0000,$0400,$0400,$0808,$0808 ; 141-150
  744.     DC.l    $0000,$0000,$0000,$0100,$0000,$0000,$0000                   ; 151-160
  745.  
  746. ; BITS: 0 = math                ; uses mathbas
  747. ;       1 = math                ; uses mathtrans
  748. ;       2 = OS 37+              ; OS
  749. ;       3 = OS 39+              ; OS
  750. ;       4 = 020+                ; CPU
  751. ;       5 = 040+                ; CPU
  752. ;       6 = 881+                ; FPU
  753. ;       7 = 040+                ; FPU
  754. ;       8 = INLINE              ; Inline instruction
  755. ;       9 = UTILLIB             ; uses utillib
  756. ;      10 = FILES               ; autoclose files
  757. ;      11 = POOLS               ; uses pools
  758. ;      12 = DOS                 ; dos.library
  759. ;      13 = INTUITION           ; intuition.library
  760. ;      14 = GRAPHICS            ; graphics.library
  761. ;      15 = stdout              ; stdout
  762. ;      16 = stdrast             ; stdrast
  763. ;      17 = conout              ; conout
  764. ;      18 = stdin               ; stdin
  765.  
  766. EFUNCENTRYSIZE=4*5
  767. FOFF        = $100
  768. NREFUNC     = 157
  769.  
  770. EFUNCTAB:
  771.     DC.L    .1,     I_WRITEF,       I_MUL,          -1,0    ; = WRITEF SPECIAL ARGS
  772.     DC.L    .2,     I_MUL,          I_DIV,          2,0     ; -> Mul 000+
  773.     DC.L    .3,     I_DIV,          I_OPENW,        2,0     ; -> Div 000+
  774.     DC.L    .4,     I_OPENW,        I_OPENS,        11,-1
  775.     DC.L    .5,     I_OPENS,        I_MOUSE,        6,-1
  776.     DC.L    .6,     I_MOUSE,        I_PLOT,         0,0
  777.     DC.L    .7,     I_PLOT,         I_LINE,         3,1
  778.     DC.L    .8,     I_LINE,         I_TEXTF,        5,1
  779.     DC.L    .9,     I_TEXTF,        I_COLOR,        -3,0     ; NARGS*-1
  780.     DC.L    .10,    I_COLOR,        I_SETRAST,      2,-1
  781.     DC.L    .11,    I_SETRAST,      I_SETOUT,       1,0
  782.     DC.L    .12,    I_SETOUT,       I_LONG,         1,0
  783.     DC.L    .13,    I_LONG,         I_INT,          1,0
  784.     DC.L    .14,    I_INT,          I_CHAR,         1,0
  785.     DC.L    .15,    I_CHAR,         I_PUTLONG,      1,0
  786.     DC.L    .16,    I_PUTLONG,      I_PUTINT,       2,0
  787.     DC.L    .17,    I_PUTINT,       I_PUTCHAR,      2,0
  788.     DC.L    .18,    I_PUTCHAR,      I_NEW,          2,0
  789.     DC.L    .19,    I_NEW,          I_EXIT,         1,0
  790.     DC.L    .20,    I_EXIT,         I_CLOSEW,       1,-1
  791.     DC.L    .21,    I_CLOSEW,       I_CLOSES,       1,0
  792.     DC.L    .22,    I_CLOSES,       I_AND,          1,0
  793.     DC.L    .23,    I_AND,          I_OR,           2,0
  794.     DC.L    .24,    I_OR,           I_NOT,          2,0
  795.     DC.L    .25,    I_NOT,          I_BOOLGAD,      1,0
  796.     DC.L    .26,    I_BOOLGAD,      I_SETTOPAZ,     8,0
  797.     DC.L    .27,    I_SETTOPAZ,     I_STRCMP,       1,8
  798.     DC.L    .28,    I_STRCMP,       I_STRCOPY,      3,$FF
  799.     DC.L    .29,    I_STRCOPY,      I_STRADD,       3,$FF
  800.     DC.L    .30,    I_STRADD,       I_STRLEN,       3,$FF
  801.     DC.L    .31,    I_STRLEN,       I_ESTRLEN,      1,0
  802.     DC.L    .32,    I_ESTRLEN,      I_ESTRMAX,      1,0
  803.     DC.L    .33,    I_ESTRMAX,      I_STRING,       1,0
  804.     DC.L    .34,    I_STRING,       I_RIGHTSTR,     1,0
  805.     DC.L    .35,    I_RIGHTSTR,     I_MIDSTR,       3,0
  806.     DC.L    .36,    I_MIDSTR,       I_STRINGF,      4,$FF
  807.     DC.L    .37,    I_STRINGF,      I_VAL,          -2,0
  808.     DC.L    .38,    I_VAL,          I_INSTR,        2,-1
  809.     DC.L    .39,    I_INSTR,        I_TRIMSTR,      3,-1
  810.     DC.L    .40,    I_TRIMSTR,      I_UPPERSTR,     1,0
  811.     DC.L    .41,    I_UPPERSTR,     I_LOWERSTR,     1,0
  812.     DC.L    .42,    I_LOWERSTR,     I_READSTR,      1,0
  813.     DC.L    .43,    I_READSTR,      I_OUT,          2,0
  814.     DC.L    .44,    I_OUT,          I_INP,          2,0
  815.     DC.L    .45,    I_INP,          I_VERSION,      1,0
  816.     DC.L    .46,    I_VERSION,      I_FILELENGTH,   1,0
  817.     DC.L    .47,    I_FILELENGTH,   I_MOUSEX,       1,0
  818.     DC.L    .48,    I_MOUSEX,       I_MOUSEY,       1,0
  819.     DC.L    .49,    I_MOUSEY,       I_FREESTACK,    1,0
  820.     DC.L    .50,    I_FREESTACK,    I_CTRLC,        0,0
  821.     DC.L    .51,    I_CTRLC,        I_LIST,         0,0
  822.     DC.L    .52,    I_LIST,         I_LISTCOPY,     1,0
  823.     DC.L    .53,    I_LISTCOPY,     I_LISTADD,      3,$FF
  824.     DC.L    .54,    I_LISTADD,      I_LISTCMP,      3,$FF
  825.     DC.L    .55,    I_LISTCMP,      I_LISTLEN,      3,$FF
  826.     DC.L    .56,    I_LISTLEN,      I_LISTMAX,      1,0
  827.     DC.L    .57,    I_LISTMAX,      I_EVEN,         1,0
  828.     DC.L    .58,    I_EVEN,         I_ODD,          1,0
  829.     DC.L    .59,    I_ODD,          I_EVAL,         1,0
  830.     DC.L    .60,    I_EVAL,         I_FORALL,       1,0
  831.     DC.L    .61,    I_FORALL,       I_EXISTS,       3,0
  832.     DC.L    .62,    I_EXISTS,       I_MAPLIST,      3,0
  833.     DC.L    .63,    I_MAPLIST,      I_ABS,          4,0
  834.     DC.L    .64,    I_ABS,          I_SHL,          1,0
  835.     DC.L    .65,    I_SHL,          I_SHR,          2,0
  836.     DC.L    .66,    I_SHR,          I_BOX,          2,0
  837.     DC.L    .67,    I_BOX,          I_DISP,         5,1
  838.     DC.L    .68,    I_DISP,         I_DISPL,        1,0
  839.     DC.L    .69,    I_DISPL,        I_LINK,         1,0
  840.     DC.L    .70,    I_LINK,         I_NEXT,         2,0
  841.     DC.L    .71,    I_NEXT,         I_FORWARD,      1,0
  842.     DC.L    .72,    I_FORWARD,      I_SETSTR,       2,0
  843.     DC.L    .73,    I_SETSTR,       I_SETLIST,      2,0
  844.     DC.L    .74,    I_SETLIST,      I_WAITMSG,      2,0
  845.     DC.L    .75,    I_WAITMSG,      I_MSGCODE,      1,0
  846.     DC.L    .76,    I_MSGCODE,      I_MSGQUAL,      0,0
  847.     DC.L    .77,    I_MSGQUAL,      I_MSGIADR,      0,0
  848.     DC.L    .78,    I_MSGIADR,      I_RND,          0,0
  849.     DC.L    .79,    I_RND,          I_RNDQ,         1,0
  850.     DC.L    .80,    I_RNDQ,         I_MOD,          1,0
  851.     DC.L    .81,    I_MOD,          I_EOR,          2,0
  852.     DC.L    .82,    I_EOR,          I_CAUSE,        2,0
  853.     DC.L    .83,    I_CAUSE,        I_LISTITEM,     1,-1
  854.     DC.L    .84,    I_LISTITEM,     I_NEWR,         2,0
  855.     DC.L    .85,    I_NEWR,         I_SIGN,         1,0
  856.     DC.L    .86,    I_SIGN,         I_PRINTF,       1,0
  857.     DC.L    .87,    I_PRINTF,       I_WAITLEFTMOUSE,-1,0
  858.     DC.L    .88,    I_WAITLEFTMOUSE,I_LEFTMOUSE,    1,0
  859.     DC.L    .89,    I_LEFTMOUSE,    I_SETIN,        1,0
  860.     DC.L    .90,    I_SETIN,        I_THROW,        1,0
  861.     DC.L    .91,    I_THROW,        I_RETHROW,      2,0
  862.     DC.L    .92,    I_RETHROW,      I_SELECTLIST,   0,0
  863.     DC.L    .93,    I_SELECTLIST,   I_SETCOLOUR,    4,0
  864.     DC.L    .94,    I_SETCOLOUR,    I_NEWM,         5,0
  865.     DC.L    .95,    I_NEWM,         I_BOUNDS,       2,0
  866.     DC.L    .96,    I_BOUNDS,       I_REALF,        3,0
  867.     DC.L    .97,    I_REALF,        I_REALVAL,      3,0
  868.     DC.L    .98,    I_REALVAL,      I_FABS,         1,0
  869.     DC.L    .99,    I_FABS,         I_FFLOOR,       1,0
  870.     DC.L    .100,   I_FFLOOR,       I_FCEIL,        1,0
  871.     DC.L    .101,   I_FCEIL,        I_FSIN,         1,0
  872.     DC.L    .102,   I_FSIN,         I_FCOS,         1,0
  873.     DC.L    .103,   I_FCOS,         I_FTAN,         1,0
  874.     DC.L    .104,   I_FTAN,         I_FEXP,         1,0
  875.     DC.L    .105,   I_FEXP,         I_FLOG,         1,0
  876.     DC.L    .106,   I_FLOG,         I_FPOW,         1,0
  877.     DC.L    .107,   I_FPOW,         I_FSQRT,        2,0
  878.     DC.L    .108,   I_FSQRT,        I_FLOG10,       1,0
  879.     DC.L    .109,   I_FLOG10,       I_FASTDISPOSE,  1,0
  880.     DC.L    .110,   I_FASTDISPOSE,  I_FASTNEW,      2,0
  881.     DC.L    .111,   I_FASTNEW,      I_MIN,          1,0
  882.     DC.L    .112,   I_MIN,          I_MAX,          2,0
  883.     DC.L    .113,   I_MAX,          I_OSTRCMP,      2,0
  884.     DC.L    .114,   I_OSTRCMP,      I_ASTRCOPY,     3,$FF
  885.     DC.L    .115,   I_ASTRCOPY,     I_CELL,         3,$FF
  886.     DC.L    .116,   I_CELL,         I_FREECELLS,    1,0
  887.     DC.L    .117,   I_FREECELLS,    I_SETCHUNKSIZE, 0,0
  888.     DC.L    .118,   I_SETCHUNKSIZE, I_CAR,          1,0
  889.     DC.L    .119,   I_CAR,          I_CDR,          1,0
  890.     DC.L    .120,   I_CDR,          I_CONS,         1,0
  891.     DC.L    .121,   I_CONS,         I_FASTDISPOSELIST,0,0
  892.     DC.L    .122,   I_FASTDISPOSELIST,I_FATAN,      1,0
  893.     DC.L    .123,   I_FATAN,        I_FSINCOS,      1,0
  894.     DC.L    .124,   I_FSINCOS,      I_FSINH,        2,0
  895.     DC.L    .125,   I_FSINH,        I_FCOSH,        1,0
  896.     DC.L    .126,   I_FCOSH,        I_FTANH,        1,0
  897.     DC.L    .127,   I_FTANH,        I_FTIEEE,       1,0
  898.     DC.L    .128,   I_FTIEEE,       I_FFIEEE,       1,0
  899.     DC.L    .129,   I_FFIEEE,       I_FASIN,        1,0
  900.     DC.L    .130,   I_FASIN,        I_FACOS,        1,0
  901.     DC.L    .131,   I_FACOS,        I_DOMETHOD,     1,0
  902.     DC.L    .132,   I_DOMETHOD,     I_DOMETHODA,    -1,0
  903.     DC.L    .133,   I_DOMETHODA,    I_CRCMETHOD,    2,0
  904.     DC.L    .134,   I_CRCMETHOD,    I_CRCMETHODA,   -2,0
  905.     DC.L    .135,   I_CRCMETHODA,   I_DOSMETHOD,    3,0
  906.     DC.L    .136,   I_DOSMETHOD,    I_DOSMETHODA,   -2,0
  907.     DC.L    .137,   I_DOSMETHODA,   I_SET,          3,0
  908.     DC.L    .138,   I_SET,          I_SETS,         -1,0
  909.     DC.L    .139,   I_SETS,         I_GET,          3,0
  910.     DC.L    .140,   I_GET,          I_GETS,         3,0
  911.     DC.L    .141,   I_GETS,         I_CTRLD,        2,0
  912.     DC.L    .142,   I_CTRLD,        I_CTRLE,        0,0
  913.     Dc.L    .143,   I_CTRLE,        I_CTRLF,        0,0
  914.     DC.L    .144,   I_CTRLF,        I_CHK,          0,0
  915.     DC.L    .145,   I_CHK,          I_EOF,          1,0
  916.     DC.L    .146,   I_EOF,          I_FOPEN,        1,0
  917.     DC.L    .147,   I_FOPEN,        I_FCLOSE,       2,0
  918.     DC.L    .148,   I_FCLOSE,       I_ALLOC,        1,0
  919.     DC.L    .149,   I_ALLOC,        I_FREE,         1,0
  920.     DC.L    .150,   I_FREE,         I_PUTF,         1,0
  921.     DC.L    .151,   I_PUTF,         I_READB,        -2,0
  922.     DC.L    .152,   I_READB,        I_WRITEB,       4,0
  923.     DC.L    .153,   I_WRITEB,       I_SIZE,         4,0
  924.     DC.L    .154,   I_CODEEND,      I_CODEEND+2,    0,0
  925.     DC.L    .155,   I_SIZE,         I_LSL,          1,0
  926.     DC.L    .156,   I_LSL,          I_LSR,          2,0
  927.     DC.L    .157,   I_LSR,          I_CODEEND,      2,0
  928.     DC.L    0,I_CODEEND,0,0
  929.  
  930. .1: DC.B    'WriteF',0
  931. .2: DC.B    'Mul',0
  932. .3: DC.B    'Div',0
  933. .4: DC.B    'OpenW',0
  934. .5: DC.B    'OpenS',0
  935. .6: DC.B    'Mouse',0
  936. .7: DC.B    'Plot',0
  937. .8: DC.B    'Line',0
  938. .9: DC.B    'TextF',0
  939. .10:    DC.B    'Colour',0
  940. .11:    DC.B    'SetStdRast',0
  941. .12:    DC.B    'SetStdOut',0
  942. .13:    DC.B    'Long',0
  943. .14:    DC.B    'Int',0
  944. .15:    DC.B    'Char',0
  945. .16:    DC.B    'PutLong',0
  946. .17:    DC.B    'PutInt',0
  947. .18:    DC.B    'PutChar',0
  948. .19:    DC.B    'New',0
  949. .20:    DC.B    'CleanUp',0
  950. .21:    DC.B    'CloseW',0
  951. .22:    DC.B    'CloseS',0
  952. .23:    DC.B    'And',0
  953. .24:    DC.B    'Or',0
  954. .25:    DC.B    'Not',0
  955. .26:    DC.B    'Gadget',0
  956. .27:    DC.B    'SetTopaz',0
  957. .28:    DC.B    'StrCmp',0
  958. .29:    DC.B    'StrCopy',0
  959. .30:    DC.B    'StrAdd',0
  960. .31:    DC.B    'StrLen',0
  961. .32:    DC.B    'EstrLen',0
  962. .33:    DC.B    'StrMax',0
  963. .34:    DC.B    'String',0
  964. .35:    DC.B    'RightStr',0
  965. .36:    DC.B    'MidStr',0
  966. .37:    DC.B    'StringF',0
  967. .38:    DC.B    'Val',0
  968. .39:    DC.B    'InStr',0
  969. .40:    DC.B    'TrimStr',0
  970. .41:    DC.B    'UpperStr',0
  971. .42:    DC.B    'LowerStr',0
  972. .43:    DC.B    'ReadStr',0
  973. .44:    DC.B    'Out',0
  974. .45:    DC.B    'Inp',0
  975. .46:    DC.B    'KickVersion',0
  976. .47:    DC.B    'FileLength',0
  977. .48:    DC.B    'MouseX',0
  978. .49:    DC.B    'MouseY',0
  979. .50:    DC.B    'FreeStack',0
  980. .51:    DC.B    'CtrlC',0
  981. .52:    DC.B    'List',0
  982. .53:    DC.B    'ListCopy',0
  983. .54:    DC.B    'ListAdd',0
  984. .55:    DC.B    'ListCmp',0
  985. .56:    DC.B    'ListLen',0
  986. .57:    DC.B    'ListMax',0
  987. .58:    DC.B    'Even',0
  988. .59:    DC.B    'Odd',0
  989. .60:    DC.B    'Eval',0
  990. .61:    DC.B    'ForAll',0
  991. .62:    DC.B    'Exists',0
  992. .63:    DC.B    'MapList',0
  993. .64:    DC.B    'Abs',0
  994. .65:    DC.B    'Shl',0
  995. .66:    DC.B    'Shr',0
  996. .67:    DC.B    'Box',0
  997. .68:    DC.B    'Dispose',0
  998. .69:    DC.B    'DisposeLink',0
  999. .70:    DC.B    'Link',0
  1000. .71:    DC.B    'Next',0
  1001. .72:    DC.B    'Forward',0
  1002. .73:    DC.B    'SetStr',0
  1003. .74:    DC.B    'SetList',0
  1004. .75:    DC.B    'WaitIMessage',0
  1005. .76:    DC.B    'MsgCode',0
  1006. .77:    DC.B    'MsgQualifier',0
  1007. .78:    DC.B    'MsgIaddr',0
  1008. .79:    DC.B    'Rnd',0
  1009. .80:    DC.B    'RndQ',0
  1010. .81:    DC.B    'Mod',0
  1011. .82:    DC.B    'Eor',0
  1012. .83:    DC.B    'Raise',0
  1013. .84:    DC.B    'ListItem',0
  1014. .85:    DC.B    'NewR',0
  1015. .86:    DC.B    'Sign',0
  1016. .87:    DC.B    'PrintF',0
  1017. .88:    DC.B    'WaitLeftMouse',0
  1018. .89:    DC.B    'LeftMouse',0
  1019. .90:    DC.B    'SetStdIn',0
  1020. .91:    DC.B    'Throw',0
  1021. .92:    DC.B    'ReThrow',0
  1022. .93:    DC.B    'SelectList',0
  1023. .94:    DC.B    'SetColour',0
  1024. .95:    DC.B    'NewM',0
  1025. .96:    DC.B    'Bounds',0
  1026. .97:    DC.B    'RealF',0
  1027. .98:    DC.B    'RealVal',0
  1028. .99:    DC.B    'Fabs',0
  1029. .100:   DC.B    'Ffloor',0
  1030. .101:   DC.B    'Fceil',0
  1031. .102:   DC.B    'Fsin',0
  1032. .103:   DC.B    'Fcos',0
  1033. .104:   DC.B    'Ftan',0
  1034. .105:   DC.B    'Fexp',0
  1035. .106:   DC.B    'Flog',0
  1036. .107:   DC.B    'Fpow',0
  1037. .108:   DC.B    'Fsqrt',0
  1038. .109:   DC.B    'Flog10',0
  1039. .110:   DC.B    'FastDispose',0
  1040. .111:   DC.B    'FastNew',0
  1041. .112:   DC.B    'Min',0
  1042. .113:   DC.B    'Max',0
  1043. .114:   DC.B    'OstrCmp',0
  1044. .115:   DC.B    'AstrCopy',0
  1045. .116:   DC.B    'Cell',0
  1046. .117:   DC.B    'FreeCells',0
  1047. .118:   DC.B    'SetChunkSize',0
  1048. .119:   DC.B    'Car',0
  1049. .120:   DC.B    'Cdr',0
  1050. .121:   DC.B    '_Cons',0
  1051. .122:   DC.B    'FastDisposeList',0
  1052. .123:   DC.B    'Fatan',0
  1053. .124:   DC.B    'Fsincos',0
  1054. .125:   DC.B    'Fsinh',0
  1055. .126:   DC.B    'Fcosh',0
  1056. .127:   DC.B    'Ftanh',0
  1057. .128:   DC.B    'Ftieee',0
  1058. .129:   DC.B    'Ffieee',0
  1059. .130:   DC.B    'Fasin',0
  1060. .131:   DC.B    'Facos',0
  1061. .132:   DC.B    'DoMethod',0
  1062. .133:   DC.B    'DoMethodA',0
  1063. .134:   DC.B    'CoerceMethod',0
  1064. .135:   DC.B    'CoerceMethodA',0
  1065. .136:   DC.B    'DoSuperMethod',0
  1066. .137:   DC.B    'DoSuperMethodA',0
  1067. .138:   dc.b    'Set',0
  1068. .139:   dc.b    'Sets',0
  1069. .140:   dc.b    'Get',0
  1070. .141:   dc.b    'Gets',0
  1071. .142:   DC.B    'CtrlD',0
  1072. .143:   DC.B    'CtrlE',0
  1073. .144:   DC.B    'CtrlF',0
  1074. .145:   DC.B    'Chk',0
  1075. .146:   DC.B    'Eof',0
  1076. .147:   DC.B    'Fopen',0
  1077. .148:   DC.B    'Fclose',0
  1078. .149:   DC.B    'Alloc',0
  1079. .150:   DC.B    'Free',0
  1080. .151:   DC.B    'PutF',0
  1081. .152:   DC.B    'ReadB',0
  1082. .153:   DC.B    'WriteB',0
  1083. .154:   DC.B    'GetA4',0
  1084. .155:   DC.B    'Size',0
  1085. .156:   DC.B    'Lsl',0
  1086. .157:   DC.B    'Lsr',0
  1087.     EVEN
  1088. ;*-*
  1089. ;; FunctionsCode
  1090. ; NOTE: ALL THIS CODE SAVES D3-D7/A4/A5/A7 BEFORE THRASHING
  1091.  
  1092.  
  1093. ; P - w. Patch, U - Unused, F - Fixed/Optimized, I - Inline, O - obsolete
  1094. ; e.g. PI = has an inline patch
  1095.  
  1096. ;; WriteF                   P
  1097. I_WRITEF:
  1098.     TST.L   -8(A4)          ;STDIO
  1099.     BEQ .2
  1100. .3: LEA 8(A7),A1
  1101.     MOVE.L  4(A7),D0
  1102.     MOVE.L  8(A7,D0.L),A0
  1103.     LEA     .1(PC),A2
  1104.     MOVE.L  4.W,A6
  1105.     MOVE.L  -64(A4),A3
  1106.     MOVE.L  A3,D2
  1107.     JSR     -522(A6)
  1108.     MOVE.L  -8(A4),D1
  1109.     MOVE.L  D2,A0
  1110. .5: TST.B   (A0)+
  1111.     BNE .5
  1112.     SUB.L   D2,A0
  1113.     MOVE.L  D3,A3           ; BACKUP
  1114.     MOVE.L  A0,D3
  1115.     SUBQ.L  #1,D3
  1116.     MOVE.L  -44(A4),A6
  1117.     JSR     -48(A6)
  1118.     MOVE.L  D3,D0
  1119.     MOVE.L  A3,D3
  1120.     RTS
  1121. .1: MOVE.B  D0,(A3)+        ; RDF DUMP
  1122.     RTS
  1123. .2: LEA .4(PC),A0
  1124.     MOVE.L  A0,D1           ;OPEN CON
  1125.     MOVE.L  #1006,D2
  1126.     MOVE.L  -44(A4),A6
  1127.     JSR -30(A6)
  1128.     MOVE.L  D0,-12(A4)
  1129.     MOVE.L  D0,-8(A4)
  1130.     TST.L   D0
  1131.     BNE.S   .3
  1132.     MOVEQ   #20,D0
  1133.     MOVE.L  D0,-28(A4)
  1134.     MOVE.L  -24(A4),A0
  1135.     JMP (A0)
  1136. .4: DC.B    "CON:0/11/640/80/Output",0
  1137.     EVEN
  1138. ;*-*
  1139. ;; Mul                      PI
  1140. I_MUL:
  1141.     MOVE.L  D3,A3
  1142.     MOVE.L  4(A7),D1
  1143.     MOVE.L  8(A7),D0
  1144.     MOVE.L  D0,D2
  1145.     MOVE.L  D0,D3
  1146.     MULU    D1,D0
  1147.     SWAP    D3
  1148.     MULU    D1,D3
  1149.     SWAP    D3
  1150.     CLR.W   D3
  1151.     ADD.L   D3,D0
  1152.     SWAP    D1
  1153.     MULU    D1,D2
  1154.     SWAP    D2
  1155.     CLR.W   D2
  1156.     ADD.L   D2,D0
  1157.     MOVE.L  A3,D3
  1158.     RTS
  1159. ;*-*
  1160. ;; Div                      PI
  1161. I_DIV:
  1162. ;   MOVE.L  D3,A3
  1163. ;   MOVE.L  8(A7),D1
  1164. ;   MOVE.L  4(A7),D0
  1165. ;   MOVEQ   #32,D3
  1166. ;   MOVEQ   #0,D2
  1167. ;.1:    SUB.L   D0,D2
  1168. ;   BCC.B   .2
  1169. ;   ADD.L   D0,D2
  1170. ;.2:    ROXL.L  #1,D1
  1171. ;   ROXL.L  #1,D2
  1172. ;   DBF     D3,.1
  1173. ;   NOT.L   D1
  1174. ;   MOVE.L  D1,D0
  1175. ;   MOVE.L  A3,D3
  1176. ;   RTS
  1177.  
  1178.  
  1179. ; maxon:
  1180.  
  1181.     MOVE.L  8(A7),D0
  1182.     MOVE.L  4(A7),D1
  1183.  
  1184. L6:      tst.l    d0
  1185.          bmi.s    L8
  1186.          tst.l    d1
  1187.          bpl.s    L9
  1188.          neg.l    d1
  1189. L7:      bsr.s    L9
  1190.          neg.l    d0
  1191.          rts
  1192.  
  1193. L8:      neg.l    d0
  1194.          tst.l    d1
  1195.          bpl.s    L7
  1196.          neg.l    d1
  1197. L9:      swap     d1
  1198.          tst.w    d1
  1199.          bne.s    L10
  1200.          move.l   d3,-(a7)
  1201.          swap     d1
  1202.          move.w   d1,d3
  1203.          move.w   d0,d2
  1204.          clr.w    d0
  1205.          swap     d0
  1206.          divu     d3,d0
  1207.          move.l   d0,d1
  1208.          swap     d0
  1209.          move.w   d2,d1
  1210.          divu     d3,d1
  1211.          move.w   d1,d0
  1212.          clr.w    d1
  1213.          swap     d1
  1214.          move.l   (a7)+,d3
  1215.          rts
  1216.  
  1217. L10:     swap     d1
  1218. E11:     movem.l  d3-d4,-(a7)
  1219.          moveq    #$1f,d2
  1220.          moveq    #$00,d3
  1221.          moveq    #$00,d4
  1222. L12:     asl.l    #$1,d3
  1223.          asl.l    #$1,d0
  1224.          roxl.l   #$1,d4
  1225.          cmp.l    d1,d4
  1226.          bcs.s    L13
  1227.          sub.l    d1,d4
  1228.          addq.l   #$1,d3
  1229. L13:     dbf      d2,L12
  1230.          move.l   d4,d1
  1231.          move.l   d3,d0
  1232.          movem.l  (a7)+,d3-d4
  1233.          rts
  1234. ;*-*
  1235. ;; OpenW                    F
  1236. I_OPENW:
  1237.     LEA .1(PC),A0
  1238.     LEA 4(A7),A1
  1239.     MOVE.L  (A1)+,48(A0)        ;4(A7)
  1240.     MOVE.L  (A1)+,18(A0)        ;8(A7)
  1241.     ADDQ.L  #2,A1
  1242.     MOVE.W  (A1)+,46(A0)        ;14(A7)
  1243.     MOVE.L  (a1)+,30(A0)        ;16(A7)
  1244.     MOVE.L  (A1)+,26(A0)        ;20(A7)
  1245.     MOVE.L  (A1)+,D0            ;24(A7)
  1246.  
  1247.     MOVEQ   #18,D1
  1248.     BSET    D1,D0
  1249.     MOVE.L  D0,14(A0)
  1250.     MOVE.L  (A1)+,10(A0)        ;28(A7)
  1251.     ADDQ.L  #2,A1
  1252.     MOVE.W  (A1)+,6(A0)         ;34(A7)
  1253.     ADDQ.L  #2,A1
  1254.     MOVE.W  (A1)+,4(A0)         ;38(A7)
  1255.     ADDQ.L  #2,A1
  1256.     MOVE.W  (A1)+,2(A0)         ;42(A7)
  1257.     ADDQ.L  #2,A1
  1258.     MOVE.W  (A1)+,(A0)          ;46(A7)
  1259.     MOVE.L  -48(A4),A6
  1260.     JSR     -$CC(A6)
  1261.     MOVE.L  D0,A0
  1262.     MOVE.L  A0,D0
  1263.     BEQ.S   .2
  1264.     MOVE.L  50(A0),D1
  1265.     MOVE.L  D1,-16(A4)
  1266. .2: RTS
  1267. .1: DC.W    0,0,0,0,-1
  1268.     DC.L    0,0,0,0,0,0,0
  1269.     DC.W    80,25,-1,-1,0,0,0
  1270. ;*-*
  1271. ;; OpenS
  1272. I_OPENS:
  1273.     LEA .1(PC),A0
  1274.     MOVE.L  4(A7),32(A0)
  1275.     MOVE.L  8(A7),20(A0)
  1276.     MOVE.W  14(A7),12(A0)
  1277.     MOVE.W  18(A7),8(A0)
  1278.     MOVE.W  22(A7),6(A0)
  1279.     MOVE.W  26(A7),4(A0)
  1280.     MOVE.L  -48(A4),A6
  1281.     JSR -198(A6)
  1282.     MOVE.L  D0,D1
  1283.     BEQ.S   .2
  1284.     ADD.L   #84,D1
  1285.     MOVE.L  D1,-16(A4)
  1286. .2: RTS
  1287. .1: DC.W    0,0,640,256,1,$0001,$8000,$100F
  1288.     DC.L    0,0,0,0,0
  1289. ;*-*
  1290. ;; Mouse                    F
  1291. I_MOUSE:
  1292.     MOVEQ   #0,D0
  1293.     BTST    #6,$BFE001
  1294.     BNE.S   .1
  1295.     MOVEQ   #1,D0
  1296. .1: LEA     $DFF016,A0
  1297.     MOVE.W  (A0),D1
  1298.     BTST    #10,D1
  1299.     BNE.S   .2
  1300.     BSET    #1,D0
  1301. .2: BTST    #8,D1
  1302.     BNE.S   .3
  1303.     BSET    #2,D0
  1304. .3: RTS
  1305. ;*-*
  1306. ;; Plot
  1307. I_PLOT:
  1308.     MOVE.L  -16(A4),A1
  1309.     MOVE.L  A1,D0
  1310.     BEQ.S   .1
  1311.     MOVE.L  -52(A4),A6
  1312.     MOVE.L  4(A7),D0
  1313.     JSR -342(A6)
  1314.     MOVE.L  -16(A4),A1
  1315.     MOVE.L  12(A7),D0
  1316.     MOVE.L  8(A7),D1
  1317.     JSR -324(A6)
  1318. .1: RTS
  1319. ;*-*
  1320. ;; Line                     F
  1321. I_LINE:
  1322.     MOVE.L  -16(A4),A1
  1323.     MOVE.L  A1,D0
  1324.     BEQ.S   .1
  1325.     LEA     4(A7),A3
  1326.     MOVE.L  -52(A4),A6
  1327.     MOVE.L  (A3)+,D0
  1328.     JSR -342(A6)
  1329.     MOVE.L  -16(A4),A1
  1330.     MOVE.L  (A3)+,D1
  1331.     MOVE.L  (A3)+,D0
  1332.     JSR -240(A6)
  1333.     MOVE.L  -16(A4),A1
  1334.     MOVE.L  (A3)+,D1
  1335.     MOVE.L  (A3)+,D0
  1336.     JSR -246(A6)
  1337. .1: RTS
  1338. ;*-*
  1339. ;; TextF                    F
  1340. I_TEXTF:
  1341.     MOVE.L  4(A7),D0
  1342.     MOVE.L  8(A7,D0.L),A0
  1343.     LEA     8(A7),A1
  1344.     LEA     .3(PC),A2
  1345.     MOVE.L  4.W,A6
  1346.     MOVE.L  -64(A4),A3      ; BETTER!
  1347.     MOVE.L  A3,D2
  1348.     JSR     -522(A6)        ; RAWDOFMT
  1349.  
  1350.     MOVE.L  -16(A4),A1
  1351.     MOVE.L  A1,D0
  1352.     BEQ.S   .1
  1353.     MOVE.L  -52(A4),A6
  1354.     MOVE.L  4(A7),D0
  1355.     LEA     12(A7,D0),A2
  1356.     MOVE.L  (A2)+,D1
  1357.     MOVE.L  (A2)+,D0
  1358.     JSR -240(A6)            ; MOVE
  1359.  
  1360.     MOVE.L  -16(A4),A1
  1361.     MOVE.L  D2,A0
  1362.     MOVE.L  A0,A2
  1363. .2: TST.B   (A2)+
  1364.     BNE.S   .2
  1365.     MOVE.L  A2,D0
  1366.     SUB.L   A0,D0
  1367.     SUBQ.L  #1,D0
  1368.     MOVE.L  D0,D2
  1369.     JSR -60(A6)             ; TEXT
  1370.  
  1371.     MOVE.L  D2,D0
  1372. .1: RTS
  1373. .3: MOVE.B  D0,(A3)+        ;RDF DUMP
  1374.     RTS
  1375. ;*-*
  1376. ;; Color                    F
  1377. I_COLOR:
  1378.     MOVE.L  -16(A4),A1
  1379.     MOVE.L  A1,D2
  1380.     BEQ.S   .1
  1381.     MOVE.L  -52(A4),A6
  1382.     MOVE.L  8(A7),D0
  1383.     JSR     -342(A6)    ; SetAPen
  1384.     MOVE.L  D2,A1
  1385.     MOVE.L  4(A7),D0
  1386.     JSR     -348(A6)    ; SetBPen
  1387. .1: RTS
  1388. ;*-*
  1389. ;; SetRast
  1390. I_SETRAST:
  1391.     MOVE.L  -16(A4),D0
  1392.     MOVE.L  4(A7),D1
  1393.     BEQ.S   .1
  1394.     MOVE.L  D1,-16(A4)
  1395. .1: RTS
  1396. ;*-*
  1397. ;; SetOut
  1398. I_SETOUT:
  1399.     MOVE.L  -8(A4),D0
  1400.     MOVE.L  4(A7),D1
  1401.     BEQ.S   .1
  1402.     MOVE.L  D1,-8(A4)
  1403. .1: RTS
  1404. ;*-*
  1405. ;; Long                     I
  1406. I_LONG:
  1407.     MOVE.L  4(A7),A0
  1408.     MOVE.L  (A0),D0
  1409.     RTS
  1410. ;*-*
  1411. ;; Int                      I
  1412. I_INT:
  1413.     MOVE.L  4(A7),A0
  1414.     MOVEQ   #0,D0
  1415.     MOVE.W  (A0),D0
  1416.     RTS
  1417. ;*-*
  1418. ;; Char                     I
  1419. I_CHAR:
  1420.     MOVE.L  4(A7),A0
  1421.     MOVEQ   #0,D0
  1422.     MOVE.B  (A0),D0
  1423.     RTS
  1424. ;*-*
  1425. ;; PutLong                  I
  1426. I_PUTLONG:
  1427.     MOVE.L  8(A7),A0
  1428.     MOVE.L  4(A7),(A0)
  1429.     RTS
  1430. ;*-*
  1431. ;; PutInt                   I
  1432. I_PUTINT:
  1433.     MOVE.L  8(A7),A0
  1434.     MOVE.W  6(A7),(A0)
  1435.     RTS
  1436. ;*-*
  1437. ;; PutChar                  I
  1438. I_PUTCHAR:
  1439.     MOVE.L  8(A7),A0
  1440.     MOVE.B  7(A7),(A0)
  1441.     RTS
  1442. ;*-*
  1443. ;; New
  1444. I_NEW:
  1445.     MOVE.L  4(A7),D0
  1446.     MOVE.L  #$10000,D1
  1447.     ADDQ.L  #8,D0
  1448.     MOVE.L  D0,D2
  1449.     MOVE.L  4.W,A6
  1450.     JSR -198(A6)
  1451.     TST.L   D0
  1452.     BEQ.S   .1
  1453.     MOVE.L  D0,A0
  1454.     MOVE.L  -20(A4),(A0)
  1455.     MOVE.L  D2,4(A0)
  1456.     MOVE.L  D0,-20(A4)
  1457.     ADDQ.L  #8,D0
  1458. .1: RTS
  1459. ;*-*
  1460. ;; CleanUp                  I
  1461. I_EXIT:
  1462.     MOVE.L  4(A7),-28(A4)
  1463.     MOVE.L  -24(A4),A0
  1464.     JMP (A0)
  1465. ;*-*
  1466. ;; CloseW
  1467. I_CLOSEW:
  1468.     MOVE.L  4(A7),A0
  1469.     MOVE.L  A0,D0
  1470.     BEQ.S   .1
  1471.     CLR.L   -16(A4)
  1472.     MOVE.L  -48(A4),A6
  1473.     JSR -72(A6)
  1474. .1: RTS
  1475. ;*-*
  1476. ;; CloseS
  1477. I_CLOSES:
  1478.     MOVE.L  4(A7),A0
  1479.     MOVE.L  A0,D0
  1480.     BEQ.S   .1
  1481.     CLR.L   -16(A4)
  1482.     MOVE.L  -48(A4),A6
  1483.     JSR -66(A6)
  1484. .1: RTS
  1485. ;*-*
  1486. ;; And                      I
  1487. I_AND:
  1488.     MOVE.L  8(A7),D0
  1489.     AND.L   4(A7),D0
  1490.     RTS
  1491. ;*-*
  1492. ;; Or                       I
  1493. I_OR:
  1494.     MOVE.L  8(A7),D0
  1495.     OR.L    4(A7),D0
  1496.     RTS
  1497. ;*-*
  1498. ;; Not                      I
  1499. I_NOT:
  1500.     MOVE.L  4(A7),D0
  1501.     NOT.L   D0
  1502.     RTS
  1503. ;*-*
  1504. ;; BoolGad
  1505. I_BOOLGAD:
  1506.     MOVE.L  32(A7),D2
  1507.     MOVE.L  D2,A1           ; A1,D2=GADGET
  1508.     MOVE.L  A1,A2
  1509.     MOVEQ   #28,D0
  1510. .XL:CLR.L   (A2)+
  1511.     DBRA    D0,.XL
  1512.     LEA 44(A1),A0       ; A0   =BORDER1
  1513.     LEA 16(A0),A2       ; A2   =INTUITEXT
  1514.     LEA 20(A2),A3       ; A3   =20 empty bytes
  1515.     MOVE.L  24(A7),40(A1)       ; --> INIT GADGET
  1516.     MOVE.W  18(A7),4(A1)
  1517.     MOVE.W  14(A7),6(A1)
  1518.     MOVE.W  10(A7),D0
  1519.     MOVE.W  D0,8(A1)
  1520.     MOVE.W  #12,10(A1)      ; D0,D1 = W,H
  1521.     SUBQ.W  #1,D0
  1522.     MOVEQ   #11,D1
  1523.     MOVE.W  #$0,12(A1)      ; FLAGS
  1524.     MOVE.W  #$1,14(A1)      ; ACTIVATEFLAGS
  1525.     MOVE.W  #$1,16(A1)      ; TYPEFLAGS
  1526.     BTST    #0,23(A7)
  1527.     BEQ.S   .5
  1528.     BSET    #0,14(A1)
  1529. .5: BTST    #1,23(A7)
  1530.     BEQ.S   .6
  1531.     BSET    #7,13(A1)
  1532. .6: MOVE.L  A2,26(A1)
  1533.     MOVE.L  A0,18(A1)
  1534.     MOVE.W  D0,8(A3)        ; --> INIT VECTORZ
  1535.     MOVE.W  D0,12(A3)
  1536.     MOVE.W  D1,6(A3)
  1537.     MOVE.W  D1,10(A3)
  1538.     MOVE.L  4(A7),D0
  1539.     MOVE.L  D0,12(A2)       ; --> INIT INTUITEXT
  1540.     MOVE.L  #$01000100,(A2)
  1541.     MOVE.W  #$2,6(A2)
  1542.     MOVE.L  D0,A6
  1543. .7: TST.B   (A6)+
  1544.     BNE.S   .7
  1545.     SUB.L   D0,A6
  1546.     SUBQ.L  #1,A6
  1547.     MOVE.L  8(A7),D1
  1548.     MOVE.L  A6,D0
  1549.     LSL.W   #3,D0
  1550.     SUB.L   D0,D1
  1551.     LSR.W   #1,D1
  1552.     MOVE.W  D1,4(A2)
  1553.     MOVEQ   #0,D0
  1554.     MOVE.L  D0,(A0)         ; --> INIT BORDER
  1555.     MOVE.L  #$01000005,4(A0)
  1556.     MOVE.L  A3,8(A0)
  1557.     LEA .3(PC),A3       ; --> TOPAZ
  1558.     LEA 8(A3),A0
  1559.     MOVE.L  A0,(A3)
  1560.     MOVE.L  A3,8(A2)
  1561.     MOVE.L  28(A7),A0       ; --> LINK GLIST
  1562.     MOVE.L  A0,D0
  1563.     BEQ.S   .2
  1564.     MOVE.L  (A0),D0         ; NEXTNODE OF PRED
  1565.     MOVE.L  A1,(A0)         ; HANG ONTO PRED
  1566.     MOVE.L  D0,(A1)         ; CONNECT NEXTNODE
  1567. .2: MOVE.L  D2,D0
  1568.     ADD.L   #120,D0
  1569.     RTS
  1570. .3: DC.L    0,$80060
  1571. .4: DC.B    "topaz.font",0,0
  1572. ;*-*
  1573. ;; SetTopaz
  1574. I_SETTOPAZ:
  1575.     MOVE.L  -52(A4),A6
  1576.     LEA .2(PC),A0
  1577.     LEA .3(PC),A1
  1578.     MOVE.L  A1,(A0)
  1579.     MOVE.W  6(A7),4(A0)
  1580.     JSR -72(A6)         ; OPENFONT
  1581.     TST.L   D0
  1582.     BEQ.S   .1
  1583.     MOVE.L  D0,A0
  1584.     MOVE.L  -16(A4),A1
  1585.     MOVE.L  A1,D0
  1586.     BEQ.S   .1
  1587.     JSR -66(A6)         ; SETFONT
  1588. .1: RTS
  1589. .2: DC.L    0,$80060
  1590. .3: DC.B    "topaz.font",0,0
  1591. ;*-*
  1592. ;; StrCmp
  1593. I_STRCMP:
  1594.     MOVEQ   #0,D0
  1595.     MOVE.L  12(A7),A0
  1596.     MOVE.L  8(A7),A1
  1597.     MOVE.W  6(A7),D0
  1598.     ADDQ.L  #1,D0
  1599. .1: SUBQ.L  #1,D0
  1600.     BEQ.S   .3
  1601.     CMPM.B  (A0)+,(A1)+
  1602.     BNE.S   .2
  1603.     CMP.B   #0,-1(A0)
  1604.     BNE.S   .1
  1605. .3: MOVEQ   #-1,D0
  1606.     RTS
  1607. .2: MOVEQ   #0,D0
  1608.     RTS
  1609. ;*-*
  1610. ;; StrCopy
  1611. I_STRCOPY:
  1612.     MOVEQ   #0,D0
  1613.     MOVE.W  6(A7),D0        ; LEN
  1614.     MOVE.L  8(A7),A1        ; STR
  1615.     MOVE.L  12(A7),A0       ; ESTR
  1616.     MOVE.L  A0,A2
  1617.     MOVEQ   #0,D1
  1618.     MOVE.W  -4(A0),D1
  1619.     CMP.L   D0,D1
  1620.     BPL.S   .1
  1621.     MOVE.L  D1,D0
  1622. .1: MOVE.L  D0,D2
  1623.     BEQ.S   .4
  1624.     SUBQ.L  #1,D0           ; D0=COPYLEN
  1625. .2: MOVE.B  (A1)+,(A0)+
  1626.     BEQ.S   .3
  1627.     DBRA    D0,.2
  1628.     MOVE.B  #0,(A0)+
  1629. .3: ADDQ.W  #1,D0
  1630.     SUB.W   D0,D2
  1631.     MOVE.W  D2,-2(A2)
  1632.     MOVE.L  A2,D0
  1633. .4: RTS
  1634. ;*-*
  1635. ;; StrAdd
  1636. I_STRADD:
  1637.     MOVE.L  D3,A3
  1638.     MOVEQ   #0,D0
  1639.     MOVE.W  6(A7),D0        ; LEN
  1640.     MOVE.L  8(A7),A1        ; STR
  1641.     MOVE.L  12(A7),A0       ; ESTR
  1642.     MOVEQ   #0,D3
  1643.     MOVE.W  -2(A0),D3
  1644.     MOVE.L  A0,A2
  1645.     MOVEQ   #0,D1
  1646.     MOVE.W  -4(A0),D1
  1647.     SUB.L   D3,D1
  1648.     ADD.L   D3,A0
  1649.     CMP.L   D0,D1
  1650.     BPL.S   .1
  1651.     MOVE.L  D1,D0
  1652. .1: MOVE.W  D0,D2
  1653.     BEQ.S   .4
  1654.     SUBQ.L  #1,D0           ; D0=COPYLEN
  1655. .2: MOVE.B  (A1)+,(A0)+
  1656.     BEQ.S   .3
  1657.     DBRA    D0,.2
  1658.     MOVE.B  #0,(A0)+
  1659. .3: ADDQ.W  #1,D0
  1660.     SUB.W   D0,D2
  1661.     ADD.W   D3,D2
  1662.     MOVE.W  D2,-2(A2)
  1663. .4: MOVE.L  A3,D3
  1664.     MOVE.L  A2,D0
  1665.     RTS
  1666. ;*-*
  1667. ;; StrLen
  1668. I_STRLEN:
  1669.     MOVE.L  4(A7),A0
  1670.     MOVE.L  A0,D1
  1671. .1: TST.B   (A0)+
  1672.     BNE.S   .1
  1673.     SUBQ.L  #1,A0
  1674.     MOVE.L  A0,D0
  1675.     SUB.L   D1,D0
  1676.     RTS
  1677. ;*-*
  1678. ;; EstrLen
  1679. I_ESTRLEN:
  1680.     MOVE.L  4(A7),A0
  1681.     MOVEQ   #0,D0
  1682.     MOVE.W  -2(A0),D0
  1683.     RTS
  1684. ;*-*
  1685. ;; EstrMax
  1686. I_ESTRMAX:
  1687.     MOVE.L  4(A7),A0
  1688.     MOVEQ   #0,D0
  1689.     MOVE.W  -4(A0),D0
  1690.     RTS
  1691. ;*-*
  1692. ;; String
  1693. I_STRING:
  1694.     MOVE.L  D3,A3
  1695.     MOVE.L  4(A7),D0
  1696.     CMP.L   #$7FF0,D0
  1697.     BPL.S   .1
  1698.     MOVE.L  D0,D3
  1699.     ADD.L   #17,D0          ; 8 (LIST) + 4 (LINK) + 4 (LENGTHS) + 1 (ZERO)
  1700.     MOVE.L  #$10000,D1
  1701.     MOVE.L  D0,D2
  1702.     MOVE.L  4.W,A6
  1703.     JSR -198(A6)
  1704.     TST.L   D0
  1705.     BEQ.S   .1
  1706.     MOVE.L  D0,A0
  1707.     MOVE.W  D3,12(A0)
  1708.     MOVE.L  -20(A4),(A0)
  1709.     MOVE.L  D2,4(A0)
  1710.     MOVE.L  D0,-20(A4)
  1711.     ADDQ.L  #8,D0
  1712.     ADDQ.L  #8,D0
  1713.     MOVE.L  A3,D3
  1714.     RTS
  1715. .1: MOVEQ   #0,D0
  1716.     MOVE.L  A3,D3
  1717.     RTS
  1718. ;*-*
  1719. ;; RightStr
  1720. I_RIGHTSTR:
  1721.     MOVEQ   #0,D0
  1722.     MOVE.L  12(A7),A0
  1723.     MOVE.L  8(A7),A1
  1724.     MOVE.W  -2(A1),D0
  1725.     SUB.L   4(A7),D0
  1726.     TST.L   D0
  1727.     BPL.S   .4
  1728.     MOVEQ   #0,D0
  1729. .4: ADD.L   D0,A1
  1730.     MOVE.L  #$FFFF,D0
  1731.     MOVE.L  A0,A2
  1732.     MOVEQ   #0,D1
  1733.     MOVE.W  -4(A0),D1
  1734.     CMP.L   D0,D1
  1735.     BPL.S   .1
  1736.     MOVE.L  D1,D0
  1737. .1: MOVE.L  D0,D2
  1738.     SUBQ.L  #1,D0           ; D0=COPYLEN
  1739. .2: MOVE.B  (A1)+,(A0)+
  1740.     BEQ.S   .3
  1741.     DBRA    D0,.2
  1742.     MOVE.B  #0,(A0)+
  1743. .3: ADDQ.W  #1,D0
  1744.     SUB.W   D0,D2
  1745.     MOVE.W  D2,-2(A2)
  1746.     MOVE.L  A2,D0
  1747.     RTS
  1748. ;*-*
  1749. ;; MidStr
  1750. I_MIDSTR:
  1751.     MOVEQ   #0,D0
  1752.     MOVE.W  6(A7),D0        ; LEN
  1753.     MOVE.L  12(A7),A1       ; STR
  1754.     ADD.L   8(A7),A1        ; +OFFSET
  1755.     MOVE.L  16(A7),A0       ; ESTR
  1756.     MOVE.L  A0,A2
  1757.     MOVEQ   #0,D1
  1758.     MOVE.W  -4(A0),D1
  1759.     CMP.L   D0,D1
  1760.     BPL.S   .1
  1761.     MOVE.L  D1,D0
  1762. .1: MOVE.L  D0,D2
  1763.     SUBQ.L  #1,D0           ; D0=COPYLEN
  1764. .2: MOVE.B  (A1)+,(A0)+
  1765.     BEQ.S   .3
  1766.     DBRA    D0,.2
  1767.     MOVE.B  #0,(A0)+
  1768. .3: ADDQ.W  #1,D0
  1769.     SUB.W   D0,D2
  1770.     MOVE.W  D2,-2(A2)
  1771.     MOVE.L  A2,D0
  1772.     RTS
  1773. ;*-*
  1774. ;; StringF
  1775. I_STRINGF:
  1776.     MOVE.L  4(A7),D0
  1777.     MOVE.L  8(A7,D0.L),A0       ; formatstr
  1778.     LEA 8(A7),A1        ; argarray
  1779.     LEA     .1(PC),A2       ; putfun
  1780.     MOVE.L  4.W,A6
  1781.     ;MOVE.L  276(A6),A3
  1782.     ;MOVE.L  58(A3),A3
  1783.     MOVE.L  -64(A4),A3      ; BETTER!
  1784.     MOVE.L  A3,D2           ; both bottom OWN stack
  1785.     JSR     -522(A6)
  1786.     MOVE.L  D2,A1
  1787.     MOVE.L  4(A7),D0
  1788.     MOVE.L  12(A7,D0.L),A0      ; ESTR
  1789.     MOVE.L  A0,A2
  1790.     MOVEQ   #0,D0
  1791.     MOVE.W  -4(A0),D0
  1792.     MOVE.L  D0,D2
  1793.     SUBQ.L  #1,D0           ; D0=COPYLEN
  1794. .2: MOVE.B  (A1)+,(A0)+
  1795.     BEQ.S   .3
  1796.     DBRA    D0,.2
  1797.     MOVE.B  #0,(A0)+
  1798. .3: ADDQ.W  #1,D0
  1799.     SUB.W   D0,D2
  1800.     MOVE.W  D2,-2(A2)
  1801.     MOVE.L  D2,D1
  1802.     EXT.L   D1
  1803.     MOVE.L  A2,D0
  1804.     RTS
  1805. .1: MOVE.B  D0,(A3)+        ;RDF DUMP
  1806.     RTS
  1807. ;*-*
  1808. ;; Val
  1809. I_VAL:
  1810.     MOVEM.L D3-D6,-(A7)     ; 16 OFF STACK
  1811.     MOVE.L  24(A7),A2
  1812.     MOVE.L  20(A7),D5       ; D5=READLENADR
  1813.     MOVEQ   #0,D6           ; D6=MINUSFLAG
  1814. .5: MOVE.B  (A2)+,D0        ; reg d0,a2
  1815.     BEQ VALER
  1816.     CMP.B   #33,D0
  1817.     BMI.S   .5
  1818.     SUBQ.L  #1,A2
  1819.     CMP.B   #"-",(A2)
  1820.     BNE.S   .NM
  1821.     ADDQ.L  #1,A2
  1822.     MOVEQ   #-1,D6
  1823. .NM:    CMP.B   #'$',(A2)
  1824.     BEQ HEX
  1825.     CMP.B   #'%',(A2)
  1826.     BEQ BIN
  1827.     LEA 11(A2),A1       ; reg d0-d3,a0-a3
  1828.     MOVE.L  A2,A0
  1829. .4: MOVE.B  (A2)+,D0
  1830.     CMP.B   #58,D0
  1831.     BPL.S   .6
  1832.     CMP.B   #48,D0
  1833.     BPL.S   .4
  1834. .6: SUBQ.L  #1,A2
  1835.     MOVE.L  A2,D4           ; D4=TOREADLEN
  1836.     CMPA.L  A2,A0
  1837.     BEQ.S   VALER
  1838.     MOVEQ   #0,D0           ; RESULT
  1839.     CMPA.L  A1,A2
  1840.     BPL.S   VALER
  1841.     LEA .2(PC),A3
  1842. .1: MOVEQ   #0,D3
  1843.     MOVE.B  -(A2),D3
  1844.     MOVE.L  (A3)+,D2
  1845.     SUB.B   #48,D3
  1846.     MOVE.L  D3,D1
  1847.     MULU    D2,D3
  1848.     SWAP    D2
  1849.     MULU    D2,D1
  1850.     SWAP    D1
  1851.     ADD.L   D1,D3
  1852.     ADD.L   D3,D0
  1853.     BCS.S   VALER
  1854.     CMPA.L  A0,A2
  1855.     BNE.S   .1
  1856.     BRA.S   ISIND0
  1857. .2: DC.L    1,10,100,1000,10000,100000,1000000
  1858.     DC.L    10000000,100000000,1000000000
  1859. ISIND0: SUB.L   24(A7),D4
  1860.     TST.L   D5
  1861.     BEQ.S   .NP
  1862.     MOVE.L  D5,A0
  1863.     MOVE.L  D4,(A0)
  1864. .NP:    TST.L   D6
  1865.     BEQ.S   .NN
  1866.     NEG.L   D0
  1867. .NN:    MOVE.L  D4,D1
  1868.     MOVEM.L (A7)+,D3-D6
  1869.     RTS
  1870. VALER:  MOVEQ   #0,D0
  1871.     MOVEQ   #0,D1
  1872.     TST.L   D5
  1873.     BEQ.S   .NP
  1874.     MOVE.L  D5,A0
  1875.     CLR.L   (A0)
  1876. .NP:    MOVEM.L (A7)+,D3-D6
  1877.     RTS
  1878. HEX:    ADDQ.L  #1,A2
  1879.     MOVE.L  A2,A0           ; reg d0-d3,a0,a2
  1880.     MOVE.L  A0,D3
  1881.     MOVEQ   #0,D1           ; RESULT
  1882.     MOVEQ   #0,D2           ; #OF SHIFTS
  1883. .4: MOVE.B  (A0)+,D0
  1884.     CMP.B   #"G",D0
  1885.     BPL.S   .2B
  1886.     CMP.B   #"0",D0
  1887.     BMI.S   .1
  1888.     CMP.B   #"9"+1,D0
  1889.     BPL.S   .2
  1890.     BRA.S   .4
  1891. .1: SUBQ.L  #1,A0
  1892.     MOVE.L  A0,D4           ; SET TOREADLEN
  1893.     CMP.L   A0,D3
  1894.     BEQ.S   VALER
  1895. .3: CMP.L   A0,D3
  1896.     BEQ.S   .5
  1897.     MOVEQ   #0,D0
  1898.     MOVE.B  -(A0),D0
  1899.     CMP.B   #"A",D0
  1900.     BPL.S   .10
  1901.     SUB.B   #"0",D0
  1902. .11:    CMP.W   #32,D2
  1903.     BEQ VALER
  1904.     LSL.L   D2,D0
  1905.     ADD.L   D0,D1
  1906.     ADDQ.L  #4,D2
  1907.     BRA.S   .3
  1908. .5: MOVE.L  D1,D0
  1909.     BRA.S   ISIND0
  1910. .2: CMP.B   #"A",D0
  1911.     BPL.S   .4
  1912.     BRA.S   .1
  1913. .2B:    CMP.B   #"a",D0
  1914.     BMI.S   .1
  1915.     CMP.B   #"g",D0
  1916.     BPL.S   .1
  1917.     BRA.S   .4
  1918. .10:    CMP.B   #"a",D0
  1919.     BPL.S   .10B
  1920.     SUB.B   #55,D0
  1921.     BRA.S   .11
  1922. .10B:   SUB.B   #55+32,D0
  1923.     BRA.S   .11
  1924. BIN:    ADDQ.L  #1,A2
  1925.     MOVE.L  A2,A0           ; reg d0-d3,a0,a2
  1926.     MOVE.L  A0,D3
  1927.     MOVEQ   #0,D1           ; RESULT
  1928.     MOVEQ   #0,D2           ; BITNUM
  1929. .4: MOVE.B  (A0)+,D0
  1930.     CMP.B   #"1",D0
  1931.     BEQ.S   .4
  1932.     CMP.B   #"0",D0
  1933.     BEQ.S   .4
  1934. .1: SUBQ.L  #1,A0
  1935.     MOVE.L  A0,D4           ; SET TOREADLEN
  1936.     CMP.L   A0,D3
  1937.     BEQ VALER
  1938. .3: CMP.L   A0,D3
  1939.     BEQ.S   .5
  1940.     MOVEQ   #0,D0
  1941.     MOVE.B  -(A0),D0
  1942.     CMP.B   #"0",D0
  1943.     BEQ.S   .10
  1944.     BSET    D2,D1
  1945. .10:    CMP.W   #32,D2
  1946.     BEQ VALER
  1947.     ADDQ.L  #1,D2
  1948.     BRA.S   .3
  1949. .5: MOVE.L  D1,D0
  1950.     BRA ISIND0
  1951. ;*-*
  1952. ;; InStr
  1953. I_INSTR:
  1954.     MOVE.L  8(A7),A1        ; STRING TO FIND
  1955.     MOVE.L  12(A7),A0       ; THE STRING
  1956.     MOVE.L  A0,D2
  1957.     ADD.L   4(A7),A0
  1958.     MOVE.B  (A1)+,D0        ; FIRST CHAR
  1959. .1: MOVE.B  (A0)+,D1
  1960.     BEQ.S   .2
  1961.     CMP.B   D0,D1
  1962.     BNE.S   .1
  1963.     MOVE.L  A0,A2
  1964.     MOVE.L  A1,A3
  1965. .3: MOVE.B  (A3)+,D1
  1966.     BEQ.S   .4
  1967.     CMP.B   (A2)+,D1
  1968.     BNE.S   .1
  1969.     BEQ.S   .3
  1970. .4: SUBQ.L  #1,A0
  1971.     MOVE.L  A0,D0
  1972.     SUB.L   D2,D0
  1973.     RTS
  1974. .2: MOVEQ   #-1,D0
  1975.     RTS
  1976. ;*-*
  1977. ;; TrimStr
  1978. I_TRIMSTR:
  1979.     MOVE.L  4(A7),A2
  1980.     MOVEQ   #0,D0
  1981. .1: MOVE.B  (A2)+,D0
  1982.     BEQ.S   .2
  1983.     CMP.W   #33,D0
  1984.     BMI.S   .1
  1985. .2: SUBQ.L  #1,A2
  1986.     MOVE.L  A2,D0
  1987.     RTS
  1988. ;*-*
  1989. ;; UpperStr
  1990. I_UPPERSTR:
  1991.     MOVE.L  4(A7),A0
  1992.     MOVE.L  A0,A1
  1993. .1: MOVE.B  (A0)+,D0
  1994.     BEQ.S   .2
  1995.     CMP.B   #97,D0
  1996.     BMI.S   .1
  1997.     CMP.B   #123,D0
  1998.     BPL.S   .1
  1999.     SUB.B   #32,D0
  2000.     MOVE.B  D0,-1(A0)
  2001.     BRA.S   .1
  2002. .2: MOVE.L  A1,D0
  2003.     RTS
  2004. ;*-*
  2005. ;; LowerStr
  2006. I_LOWERSTR:
  2007.     MOVE.L  4(A7),A0
  2008.     MOVE.L  A0,A1
  2009. .1: MOVE.B  (A0)+,D0
  2010.     BEQ.S   .2
  2011.     CMP.B   #91,D0
  2012.     BPL.S   .1
  2013.     CMP.B   #65,D0
  2014.     BMI.S   .1
  2015.     ADD.B   #32,D0
  2016.     MOVE.B  D0,-1(A0)
  2017.     BRA.S   .1
  2018. .2: MOVE.L  A1,D0
  2019.     RTS
  2020. ;*-*
  2021. ;; ReadStr
  2022. I_READSTR:
  2023.     MOVEM.L D3/D4/D6/D7,-(A7)
  2024.     MOVE.L  20(A7),A2       ; ESTR
  2025.     MOVE.L  A2,D4
  2026.     MOVE.L  24(A7),D7       ; FH
  2027.     MOVEQ   #0,D6
  2028.     MOVE.W  -4(A2),D6       ; MAXLEN
  2029.     ADD.L   A2,D6
  2030.     MOVE.L  -44(A4),A6
  2031.     MOVEQ   #1,D3
  2032. .1: CMP.L   D6,A2
  2033.     BEQ.S   .4
  2034.     MOVE.L  D7,D1
  2035.     MOVE.L  A2,D2
  2036.     ADDQ.L  #1,A2
  2037.     JSR -42(A6)
  2038.     CMP.W   #1,D0
  2039.     BMI.S   .5
  2040.     CMP.B   #10,-1(A2)
  2041.     BNE.S   .1
  2042.     MOVEQ   #0,D0
  2043.     SUBQ.L  #1,A2
  2044. .4: MOVE.L  A2,D1
  2045.     MOVE.B  #0,(A2)+
  2046.     SUB.L   D4,D1
  2047.     MOVE.L  D4,A0
  2048.     MOVE.W  D1,-2(A0)
  2049.     MOVEM.L (A7)+,D3/D4/D6/D7
  2050.     RTS
  2051. .5: SUBQ.L  #1,A2
  2052.     MOVEQ   #-1,D0
  2053.     BRA.S   .4
  2054. ;*-*
  2055.  
  2056. ;; Out
  2057. I_OUT:
  2058.     MOVE.L  D3,A3
  2059.     MOVE.L  8(A7),D1
  2060.     LEA 7(A7),A0
  2061.     MOVE.L  A0,D2
  2062.     MOVEQ   #1,D3
  2063.     MOVE.L  -44(A4),A6
  2064.     JSR -48(A6)
  2065.     MOVE.L  A3,D3
  2066.     RTS
  2067. ;*-*
  2068. ;; Inp
  2069. I_INP:
  2070.     MOVE.L  D3,A3
  2071.     MOVE.L  4(A7),D1
  2072.     MOVEQ   #1,D3
  2073.     LEA 4(A7),A0
  2074.     MOVE.L  A0,D2
  2075.     MOVE.L  -44(A4),A6
  2076.     JSR -42(A6)
  2077.     MOVE.L  A3,D3
  2078.     TST.L   D0
  2079.     BEQ.S   .1
  2080.     MOVEQ   #0,D0
  2081.     MOVE.B  4(A7),D0
  2082.     RTS
  2083. .1: MOVEQ   #-1,D0
  2084.     RTS
  2085. ;*-*
  2086. ;; Version
  2087. I_VERSION:
  2088.     MOVE.L  4(A7),D0        ; V. REQUESTED
  2089.     MOVE.L  4.W,A6
  2090.     MOVE.W  20(A6),D1       ; V. CURRENTLY RUNNING
  2091.     CMP.W   D0,D1
  2092.     BMI.S   .1
  2093.     MOVEQ   #-1,D0          ; TRUE=RIGHT KICK
  2094.     RTS
  2095. .1: MOVEQ   #0,D0           ; FALSE
  2096.     RTS
  2097. ;*-*
  2098. ;; FileLength
  2099. I_FILELENGTH:
  2100.     MOVEM.L D4/D6/D7,-(A7)
  2101.     MOVE.L  16(A7),D1
  2102.     MOVEQ   #-2,D2
  2103.     MOVE.L  -44(A4),A6
  2104.     JSR -84(A6)
  2105.     MOVE.L  D0,D7           ; LOCK
  2106.     BEQ.S   .1
  2107.     MOVE.L  D0,D1
  2108.     MOVE.L  #-260,D4        ; FRAME WITH BCPL ADDRESS CONV.
  2109.     MOVE.L  A7,D0
  2110.     BTST    #1,D0
  2111.     BEQ.S   .4
  2112.     SUBQ.L  #2,D4
  2113. .4: LEA 0(A7,D4.L),A7
  2114.     MOVE.L  A7,D2
  2115.     JSR -102(A6)        ; EXAMINE
  2116.     MOVE.L  124(A7),D6      ; GET LENGTH FROM FIB
  2117.     NEG.L   D4
  2118.     LEA 0(A7,D4.L),A7
  2119.     TST.L   D0
  2120.     BEQ.S   .2
  2121.     BSR .3
  2122.     MOVE.L  D6,D0
  2123.     MOVEM.L (A7)+,D4/D6/D7
  2124.     RTS
  2125. .3: MOVE.L  D7,D1           ; UNLOCK
  2126.     JSR -90(A6)
  2127.     RTS
  2128. .2: BSR.S   .3
  2129. .1: MOVEQ   #-1,D0
  2130.     MOVEM.L (A7)+,D4/D6/D7
  2131.     RTS
  2132. ;*-*
  2133. ;; MouseX                   I
  2134. I_MOUSEX:
  2135.     MOVEQ   #0,D0
  2136.     MOVE.L  4(A7),A0
  2137.     MOVE.W  14(A0),D0
  2138.     RTS
  2139. ;*-*
  2140. ;; MouseY                   I
  2141. I_MOUSEY:
  2142.     MOVEQ   #0,D0
  2143.     MOVE.L  4(A7),A0
  2144.     MOVE.W  12(A0),D0
  2145.     RTS
  2146. ;*-*
  2147. ;; FreeStack
  2148. I_FREESTACK:
  2149.     MOVE.L  A7,D0
  2150.     SUB.L   -64(A4),D0
  2151.     SUB.L   #1000,D0
  2152.     RTS
  2153. ;*-*
  2154. ;; CtrlC
  2155. I_CTRLC:
  2156.     MOVEQ   #0,D0
  2157.     MOVEQ   #0,D1
  2158.     MOVE.L  4.W,A6
  2159.     JSR -306(A6)
  2160.     BTST    #12,D0          ; NOTE: 13=CTRLD ETC.
  2161.     BEQ.S   .1
  2162.     MOVEQ   #0,D0
  2163.     MOVE.L  #4096,D1
  2164.     JSR -306(A6)
  2165.     MOVEQ   #-1,D0
  2166.     RTS
  2167. .1: MOVEQ   #0,D0           ; D0<--TRUE/FALSE
  2168.     RTS
  2169. ;*-*
  2170.  
  2171. ;; List
  2172. I_LIST:
  2173.     MOVE.L  D3,A3
  2174.     MOVE.L  4(A7),D0
  2175.     CMP.L   #$7FF0,D0
  2176.     BPL.S   .1
  2177.     MOVE.L  D0,D3           ; LEN
  2178.     LSL.L   #2,D0
  2179.     ADD.L   #16,D0          ; 8 (LIST) + 4 (LINK) + 4 (LENGTHS)
  2180.     MOVE.L  #$10000,D1
  2181.     MOVE.L  D0,D2           ; SLEN
  2182.     MOVE.L  4.W,A6
  2183.     JSR -198(A6)
  2184.     TST.L   D0
  2185.     BEQ.S   .1
  2186.     MOVE.L  D0,A0
  2187.     MOVE.W  D3,12(A0)
  2188.     MOVE.L  -20(A4),(A0)
  2189.     MOVE.L  D2,4(A0)
  2190.     MOVE.L  D0,-20(A4)
  2191.     ADDQ.L  #8,D0
  2192.     ADDQ.L  #8,D0
  2193.     MOVE.L  A3,D3
  2194.     RTS
  2195. .1: MOVEQ   #0,D0
  2196.     MOVE.L  A3,D3
  2197.     RTS
  2198. ;*-*
  2199.  
  2200. ;; ListCopy
  2201. I_LISTCOPY:
  2202.     LEA 6(A7),A1
  2203.     MOVE.w  (A1)+,D0 ; len
  2204.     MOVe.L  (A1)+,A0 ; src
  2205.     move.l  (a1)+,a1 ; dst
  2206.     MOVE.L  A1,A2
  2207.     CMP.W   #-1,D0
  2208.     BNE.S   .1
  2209.     MOVE.W  -2(A0),D0
  2210. .1: CMP.W   -4(A1),D0
  2211.     BMI.S   .2
  2212.     MOVE.W  -4(A1),D0
  2213. .2: CMP.W   #1,D0
  2214.     BMI.S   .3
  2215.     MOVE.W  D0,-2(A1)
  2216.     SUBQ.W  #1,D0
  2217. .XL:MOVE.L  (A0)+,(A1)+
  2218.     DBRA    D0,.XL
  2219. .3: MOVE.L  A2,D0
  2220.     RTS
  2221. ;*-*
  2222. ;; ListAdd
  2223. I_LISTADD:
  2224.     MOVE.W  6(A7),D0        ; LEN
  2225.     MOVE.L  8(A7),A0        ; SRC
  2226.     MOVE.L  12(A7),A1       ; DEST
  2227.     MOVE.L  A1,A2
  2228.     CMP.W   #-1,D0
  2229.     BNE.S   .1
  2230.     MOVE.W  -2(A0),D0
  2231. .1: MOVE.W  -4(A1),D1
  2232.     SUB.W   -2(A1),D1
  2233.     CMP.W   D1,D0
  2234.     BMI.S   .2
  2235.     MOVE.W  D1,D0
  2236. .2: CMP.W   #1,D0
  2237.     BMI.S   .3
  2238.     MOVE.W  -2(A1),D1
  2239.     ADD.W   D0,-2(A1)
  2240.     EXT.L   D1
  2241.     LSL.L   #2,D1
  2242.     ADD.L   D1,A1
  2243.     SUBQ.W  #1,D0
  2244. .XL:MOVE.L  (A0)+,(A1)+
  2245.     DBRA    D0,.XL
  2246. .3: MOVE.L  A2,D0
  2247.     RTS
  2248. ;*-*
  2249. ;; ListCmp
  2250. I_LISTCMP:
  2251.     MOVE.W  6(A7),D0        ; LEN
  2252.     MOVE.L  8(A7),A0        ; SRC
  2253.     MOVE.L  12(A7),A1       ; DEST
  2254.     CMP.W   #-1,D0
  2255.     BNE.S   .1
  2256.     MOVE.W  -2(A0),D0
  2257. .1: CMP.W   -2(A1),D0
  2258.     BNE.S   .4          ; LENDEST<>LENSRC
  2259.     CMP.W   #1,D0
  2260.     BMI.S   .3
  2261.     SUBQ.W  #1,D0
  2262. .XL:CMPM.L  (A0)+,(A1)+
  2263.     BNE.S   .4
  2264.     DBRA    D0,.XL
  2265. .3: MOVEQ   #-1,D0
  2266.     RTS
  2267. .4: MOVEQ   #0,D0
  2268.     RTS
  2269. ;*-*
  2270. ;; ListLen
  2271. I_LISTLEN:
  2272.     MOVE.L  4(A7),A0
  2273.     MOVEQ   #0,D0
  2274.     MOVE.W  -2(A0),D0
  2275.     RTS
  2276. ;*-*
  2277. ;; ListMax
  2278. I_LISTMAX:
  2279.     MOVE.L  4(A7),A0
  2280.     MOVEQ   #0,D0
  2281.     MOVE.W  -4(A0),D0
  2282.     RTS
  2283. ;*-*
  2284. ;; Even                     I
  2285. I_EVEN:
  2286.     BTST    #0,7(A7)
  2287.     BEQ.S   .1
  2288.     MOVEQ   #0,D0
  2289.     RTS
  2290. .1: MOVEQ   #-1,D0
  2291.     RTS
  2292. ;*-*
  2293. ;; Odd                      I
  2294. I_ODD:
  2295.     BTST    #0,7(A7)
  2296.     BNE.S   .1
  2297.     MOVEQ   #0,D0
  2298.     RTS
  2299. .1: MOVEQ   #-1,D0
  2300.     RTS
  2301. ;*-*
  2302. ;; Eval                     I
  2303. I_EVAL:
  2304.     MOVE.L  4(A7),A0
  2305.     JSR (A0)            ; ACTIONNES DANGEREUSES !!!
  2306.     RTS
  2307. ;*-*
  2308. ;; ForAll
  2309. I_FORALL:
  2310.     MOVE.L  4(A7),A0        ; code
  2311.     MOVE.L  8(A7),A1        ; list
  2312.     MOVE.L  12(A7),A2       ; VAR
  2313.     MOVEQ   #-1,D0          ; TRUTH VALUE ->D1
  2314.     MOVE.W  -2(A1),D2       ; COUNT
  2315.     BEQ.S   .1
  2316.     SUBQ.L  #1,D2
  2317.     MOVE.L  D0,D1
  2318. .XL:MOVE.L  (A1)+,(A2)
  2319.     MOVEM.L D1-D2/A0-A2,-(A7)
  2320.     JSR (A0)
  2321.     MOVEM.L (A7)+,D1-D2/A0-A2
  2322.     TST.L   D0
  2323.     BEQ.S   .2
  2324.     DBRA    D2,.XL
  2325.     BRA.S   .3
  2326. .2: MOVEQ   #0,D1
  2327.     DBRA    D2,.XL
  2328. .3: MOVE.L  D1,D0
  2329. .1: RTS
  2330. ;*-*
  2331. ;; Exists
  2332. I_EXISTS:
  2333.     MOVE.L  4(A7),A0        ; code
  2334.     MOVE.L  8(A7),A1        ; list
  2335.     MOVE.L  12(A7),A2       ; VAR
  2336.     MOVEQ   #0,D0           ; TRUTH VALUE ->D1
  2337.     MOVE.W  -2(A1),D2       ; COUNT
  2338.     BEQ.S   .1
  2339.     SUBQ.L  #1,D2
  2340.     MOVE.L  D0,D1
  2341. .XL:MOVE.L  (A1)+,(A2)
  2342.     MOVEM.L D1-D2/A0-A2,-(A7)
  2343.     JSR (A0)
  2344.     MOVEM.L (A7)+,D1-D2/A0-A2
  2345.     TST.L   D0
  2346.     BNE.S   .2
  2347.     DBRA    D2,.XL
  2348.     BRA.S   .3
  2349. .2: MOVEQ   #-1,D1
  2350.     DBRA    D2,.XL
  2351. .3: MOVE.L  D1,D0
  2352. .1: RTS
  2353. ;*-*
  2354. ;; MapList
  2355. I_MAPLIST:
  2356.     MOVE.L  4(A7),A0        ; code
  2357.     MOVE.L  8(A7),A3        ; DESTLIST
  2358.     MOVE.L  12(A7),A1       ; SRClist
  2359.     MOVE.L  16(A7),A2       ; VAR
  2360.     MOVE.L  A3,-(A7)
  2361.     MOVE.W  -4(A3),D0
  2362.     CMP.W   -2(A1),D0
  2363.     BMI.S   .1
  2364.     MOVE.W  -2(A1),-2(A3)
  2365.     MOVE.W  -2(A1),D2       ; COUNT
  2366.     BEQ.S   .1
  2367.     SUBQ.L  #1,D2
  2368. ;   MOVE.L  D0,D1
  2369. .XL: MOVE.L  (A1)+,(A2)
  2370.     MOVEM.L D2/A0-A3,-(A7)
  2371.     JSR (A0)
  2372.     MOVEM.L (A7)+,D2/A0-A3
  2373.     MOVE.L  D0,(A3)+
  2374.     DBRA    D2,.XL
  2375. .1: MOVE.L  (A7)+,D0
  2376.     RTS
  2377. ;*-*
  2378. ;; Abs                      I
  2379. I_ABS:
  2380.     MOVE.L  4(A7),D0
  2381.     BPL.S   .1
  2382.     NEG.L   D0
  2383. .1: RTS
  2384. ;*-*
  2385. ;; Shl                      I
  2386. I_SHL:
  2387.     MOVE.L  8(A7),D0
  2388.     MOVE.L  4(A7),D1
  2389.     ASL.L   D1,D0
  2390.     RTS
  2391. ;*-*
  2392. ;; Shr                      I
  2393. I_SHR:
  2394.     MOVE.L  8(A7),D0
  2395.     MOVE.L  4(A7),D1
  2396.     ASR.L   D1,D0
  2397.     RTS
  2398. ;*-*
  2399. ;; Box
  2400. I_BOX:
  2401.     MOVE.L  D3,A3
  2402.     MOVE.L  -16(A4),A1      ; rast
  2403.     MOVE.L  A1,D0
  2404.     BEQ.S   .1
  2405.     MOVE.L  -52(A4),A6
  2406.     MOVE.L  4(A7),D0
  2407.     JSR -342(A6)        ; setapen
  2408.     MOVE.L  -16(A4),A1
  2409.     MOVE.L  20(A7),D0
  2410.     MOVE.L  16(A7),D1
  2411.     MOVE.L  12(A7),D2
  2412.     MOVE.L  8(A7),D3
  2413.     JSR -306(A6)        ; rectfill
  2414. .1: MOVE.L  A3,D3
  2415.     RTS
  2416. ;*-*
  2417.  
  2418. ;; Dispose
  2419. I_DISP:
  2420.     MOVE.L  4(A7),D0
  2421.     BEQ.S   .1
  2422.     SUBQ.L  #8,D0
  2423.     LEA -20(A4),A1
  2424. .XL:MOVE.L  (A1),D1
  2425.     BEQ.S   .1
  2426.     MOVE.L  A1,A2           ; ADR TO LINK BACK TO
  2427.     MOVE.L  D1,A1
  2428.     CMP.L   D1,D0
  2429.     BNE.S   .XL
  2430.     MOVE.L  4(A1),D0        ; MEMSIZE
  2431.     MOVE.L  (A1),(A2)       ; LINK BACK
  2432.     MOVE.L  4.W,A6
  2433.     JSR -210(A6)
  2434. .1: RTS
  2435. ;*-*
  2436. ;; DisposeList
  2437. I_DISPL:
  2438.     MOVE.L  4(A7),A3        ; A3=STRING
  2439. .ML:    MOVE.L  A3,D0
  2440.     BEQ.S   .1
  2441.     MOVE.L  -8(A3),A3
  2442.     SUBQ.L  #8,D0
  2443.     SUBQ.L  #8,D0           ; D0=MEM
  2444.     LEA -20(A4),A1
  2445. .XL:MOVE.L  (A1),D1
  2446.     BEQ.S   .ML
  2447.     MOVE.L  A1,A2           ; A2=ADR TO LINK BACK TO
  2448.     MOVE.L  D1,A1
  2449.     CMP.L   D1,D0
  2450.     BNE.S   .XL
  2451.     MOVE.L  4(A1),D0        ; MEMSIZE
  2452.     MOVE.L  (A1),(A2)       ; LINK BACK
  2453.     MOVE.L  4.W,A6
  2454.     JSR -210(A6)
  2455.     BRA.S   .ML
  2456. .1: RTS
  2457. ;*-*
  2458.  
  2459. ;; Link
  2460. I_LINK:
  2461.     MOVE.L  8(A7),A0
  2462.     MOVE.L  A0,D0
  2463.     BEQ.S   .1
  2464.     MOVE.L  4(A7),-8(A0)
  2465. .1: RTS
  2466. ;*-*
  2467. ;; Next
  2468. I_NEXT:
  2469.     MOVE.L  4(A7),D0
  2470.     BEQ.S   .1
  2471.     MOVE.L  D0,A0
  2472.     MOVE.L  -8(A0),D0
  2473. .1: RTS
  2474. ;*-*
  2475. ;; Forward
  2476. I_FORWARD:
  2477.     LEA 8(A7),A0        ; LIST
  2478.     MOVE.L  4(A7),D1        ; NUM
  2479.     ADDQ.L  #1,D1
  2480. .XL:MOVE.L  (A0),D0
  2481.     BEQ.S   .1
  2482.     MOVE.L  D0,A0
  2483.     SUBQ.L  #8,A0
  2484.     SUBQ.L  #1,D1
  2485.     BNE.S   .XL
  2486. .1: RTS
  2487. ;*-*
  2488. ;; SetStr
  2489. I_SETSTR:
  2490.     MOVE.W  6(A7),D0
  2491.     MOVE.L  8(A7),A0
  2492.     CMP.W   -4(A0),D0
  2493.     BHI.S   .1
  2494.     MOVE.W  D0,-2(A0)
  2495.     MOVE.B  #0,0(A0,D0.W)
  2496. .1: RTS
  2497. ;*-*
  2498. ;; SetList
  2499. I_SETLIST:
  2500.     MOVE.W  6(A7),D0
  2501.     MOVE.L  8(A7),A0
  2502.     CMP.W   -4(A0),D0
  2503.     BHI.S   .1
  2504.     MOVE.W  D0,-2(A0)
  2505. .1: RTS
  2506. ;*-*
  2507. ;; WaitMsg
  2508. I_WAITMSG:
  2509.     MOVE.L  4(A7),A0
  2510.     MOVE.L  $56(A0),A2      ; A2=PORT
  2511.     MOVE.L  4.W,A6
  2512.     MOVE.L  A2,A0
  2513.     JSR -372(A6)        ; GETMSG
  2514.     MOVE.L  D0,A3           ; A3=MES
  2515.     TST.L   D0
  2516.     BNE.S   .1
  2517. .2: MOVE.L  A2,A0
  2518.     JSR -384(A6)        ; WAITPORT
  2519.     MOVE.L  A2,A0
  2520.     JSR -372(A6)        ; GETMSG
  2521.     MOVE.L  D0,A3
  2522.     TST.L   D0
  2523.     BEQ.S   .2
  2524. .1: MOVE.L  28(A3),-72(A4)
  2525.     MOVE.L  24(A3),-68(A4)
  2526.     MOVE.L  20(A3),D2
  2527.     MOVE.L  A3,A1
  2528.     JSR -378(A6)        ; REPLY
  2529.     MOVE.L  D2,D0           ; CLASS
  2530.     RTS
  2531. ;*-*
  2532. ;; MsgCode                  I
  2533. I_MSGCODE:
  2534.     MOVEQ   #0,D0
  2535.     MOVE.W  -68(A4),D0
  2536.     RTS
  2537. ;*-*
  2538. ;; MsgQual                  I
  2539. I_MSGQUAL:
  2540.     MOVEQ   #0,D0
  2541.     MOVE.W  -66(A4),D0
  2542.     RTS
  2543. ;*-*
  2544. ;; MsgIaddr                 I
  2545. I_MSGIADR:
  2546.     MOVE.L  -72(A4),D0
  2547.     RTS
  2548. ;*-*
  2549. ;; Rnd
  2550. I_RND:                ; rand16:=RangeRand(max16)
  2551.     MOVE.L  4(A7),D2        ; 6(a7) was E(a7) ????
  2552.     BMI.S   .SET
  2553.     MOVE.W  D2,D1           ; RangeRand(1000) --> 0..999
  2554.     SUBQ.W  #$1,D1
  2555.     MOVE.L  .S(PC),D0       ; randnr:=Rnd(max)
  2556. .2: ADD.L   D0,D0
  2557.     BHI.S   .3
  2558.     EORI.L  #$1D872B41,D0
  2559. .3: LSR.W   #$1,D1
  2560.     BNE.S   .2
  2561.     LEA .S(PC),A0
  2562.     MOVE.L  D0,(A0)
  2563.     TST.W   D2
  2564.     BNE.S   .4
  2565.     SWAP    D0
  2566.     BRA.S   .5
  2567. .4: MULU    D2,D0
  2568. .5: CLR.W   D0
  2569.     SWAP    D0
  2570.     RTS
  2571. .SET:   NEG.L   D2
  2572.     LEA .S(PC),A0
  2573.     MOVE.L  D2,(A0)
  2574.     RTS
  2575. .S: DC.L    0
  2576. ;*-*
  2577. ;; RndQ
  2578. I_RNDQ:               ;   seed32:=FastRand(seed32)
  2579.     MOVE.L  $0004(A7),D0
  2580.     ADD.L   D0,D0           ;   seed:=RndQ(seed)
  2581.     BHI.S   .1
  2582.     EORI.L  #$1D872B41,D0
  2583. .1: RTS
  2584. ;*-*
  2585. ;; Mod                      PI
  2586. I_MOD:
  2587.     MOVE.L  8(A7),D0
  2588.     DIVS    6(A7),D0
  2589.     MOVE.L  D0,D1
  2590.     SWAP    D0
  2591.     EXT.L   D0
  2592.     EXT.L   D1
  2593.     RTS
  2594. ;*-*
  2595. ;; Eor                      I
  2596. I_EOR:
  2597.     MOVE.L  4(A7),D0
  2598.     MOVE.L  8(A7),D1
  2599.     EOR.L   D1,D0
  2600.     RTS
  2601. ;*-*
  2602. ;; Cause
  2603. ; see also NEWR(), Throw() and ReThrow()
  2604.  
  2605. I_CAUSE:
  2606.     MOVE.L  4(A7),-84(A4)       ; FILL "EXCEPTION" VAR
  2607.     MOVE.L  -76(A4),D0
  2608.     BEQ.S   .1
  2609.     MOVE.L  D0,A0           ; A0=CODE TO JUMP TO
  2610.     MOVE.L  -80(A4),A7      ; STACK BACK
  2611.     MOVE.L  -88(A4),A5
  2612.     MOVE.L  (A7)+,-88(A4)       ; (A5)
  2613.     MOVE.L  (A7)+,-76(A4)       ; PUT PREVIOUS HANDLER BACK (CODE)
  2614.     MOVE.L  (A7)+,-80(A4)       ; (STACK)
  2615.     JMP (A0)
  2616. .1: MOVE.L  -24(A4),A0      ; PERFORM CLEANUP(0)
  2617.     JMP (A0)
  2618. ;*-*
  2619. ;; ListItem
  2620. I_LISTITEM:           ; SIMPLE, BUT EFFECTIVE !
  2621.     MOVE.L  4(A7),D0
  2622.     LSL.L   #2,D0
  2623.     MOVE.L  8(A7),A0
  2624.     MOVE.L  0(A0,D0.L),D0
  2625.     RTS
  2626. ;*-*
  2627.  
  2628. ;; NewR
  2629. I_NEWR:
  2630.     MOVE.L  4(A7),D0        ; COPY OF New()
  2631.     MOVE.L  #$10000,D1
  2632.     ADDQ.L  #8,D0
  2633.     MOVE.L  D0,D2
  2634.     MOVE.L  4.W,A6
  2635.     JSR -198(A6)
  2636.     TST.L   D0
  2637.     BEQ.S   .1
  2638.     MOVE.L  D0,A0
  2639.     MOVE.L  -20(A4),(A0)
  2640.     MOVE.L  D2,4(A0)
  2641.     MOVE.L  D0,-20(A4)
  2642.     ADDQ.L  #8,D0
  2643.     RTS
  2644. .1: MOVE.L  #"MEM",-84(A4)      ; COPY OF Raise()
  2645.     MOVE.L  -76(A4),D0
  2646.     BEQ.S   .2
  2647.     MOVE.L  D0,A0
  2648.     MOVE.L  -80(A4),A7
  2649.     MOVE.L  -88(A4),A5
  2650.     MOVE.L  (A7)+,-88(A4)
  2651.     MOVE.L  (A7)+,-76(A4)
  2652.     MOVE.L  (A7)+,-80(A4)
  2653.     JMP (A0)
  2654. .2: MOVE.L  -24(A4),A0
  2655.     JMP (A0)
  2656.     RTS
  2657. ;*-*
  2658.  
  2659. ;; Sign
  2660. I_SIGN:
  2661.     MOVE.L  4(A7),D0
  2662.     BMI.S   .1
  2663.     BEQ.S   .2
  2664.     MOVEQ   #1,D0
  2665.     RTS
  2666. .1: MOVEQ   #-1,D0
  2667.     RTS
  2668. .2: MOVEQ   #0,D0
  2669.     RTS
  2670. ;*-*
  2671. ;; PrintF
  2672. I_PRINTF:
  2673.     TST.L   -8(A4)          ;STDIO
  2674.     BEQ .2
  2675. .3: MOVE.L  4(A7),D0
  2676.     MOVE.L  8(A7,D0.L),A0
  2677.     LEA 8(A7),A1
  2678.     LEA .1(PC),A2
  2679.     MOVE.L  4.W,A6
  2680.     MOVE.L  -64(A4),A3
  2681.     MOVE.L  A3,D2
  2682.     JSR -522(A6)
  2683.     MOVE.L  -8(A4),D1
  2684.     MOVE.L  -44(A4),A6
  2685.     JSR -342(A6)
  2686.     MOVE.L  D2,A0           ; JUST FOR LEN!
  2687. .C: TST.B   (A0)+
  2688.     BNE.S   .C
  2689.     SUB.L   D2,A0
  2690.     SUBQ.L  #1,A0
  2691.     MOVE.L  A0,D0
  2692.     RTS
  2693. .1: MOVE.B  D0,(A3)+        ; RDF DUMP
  2694.     RTS
  2695. .2: LEA .4(PC),A0
  2696.     MOVE.L  A0,D1           ; OPEN CON
  2697.     MOVE.L  #1006,D2
  2698.     MOVE.L  -44(A4),A6
  2699.     JSR -30(A6)
  2700.     MOVE.L  D0,-12(A4)
  2701.     MOVE.L  D0,-8(A4)
  2702.     TST.L   D0
  2703.     BNE.S   .3
  2704.     MOVEQ   #20,D0
  2705.     MOVE.L  D0,-28(A4)
  2706.     MOVE.L  -24(A4),A0
  2707.     JMP (A0)
  2708. .4: DC.B    "CON:0/11/640/80/Output",0
  2709.     EVEN
  2710. ;*-*
  2711. ;; WaitLeftMouse
  2712. I_WAITLEFTMOUSE:
  2713.     MOVE.L  4(A7),A3        ; A3=WIN
  2714.     MOVE.L  82(A3),D0
  2715.     BTST    #3,D0
  2716.     BNE.S   .3          ; CHECK IDCMP CONTAINS MOUSE
  2717.     BSET    #3,D0
  2718.     MOVE.L  -48(A4),A6
  2719.     MOVE.L  A3,A0
  2720.     JSR -150(A6)        ; MODIFYIDCMP
  2721. .3: MOVE.L  $56(A3),A2      ; A2=PORT
  2722.     MOVE.L  4.W,A6
  2723.     MOVE.L  A2,A0
  2724.     JSR -372(A6)        ; GETMSG
  2725.     MOVE.L  D0,A3           ; A3=MES
  2726.     TST.L   D0
  2727.     BNE.S   .1
  2728. .2: MOVE.L  A2,A0
  2729.     JSR -384(A6)        ; WAITPORT
  2730.     MOVE.L  A2,A0
  2731.     JSR -372(A6)        ; GETMSG
  2732.     MOVE.L  D0,A3
  2733.     TST.L   D0
  2734.     BEQ.S   .2
  2735. .1: MOVE.L  A3,A1           ; MES
  2736.     MOVE.L  20(A1),D2
  2737.     JSR -378(A6)        ; REPLY
  2738.     MOVE.L  D2,D0           ; CLASS
  2739.     BTST    #3,D0
  2740.     BEQ.S   .2
  2741.     RTS
  2742. ;*-*
  2743. ;; LeftMouse
  2744. I_LEFTMOUSE:
  2745.     MOVE.L  4(A7),A3        ; A3=WIN
  2746.     MOVE.L  82(A3),D0
  2747.     BTST    #3,D0
  2748.     BNE.S   .3          ; CHECK IDCMP CONTAINS MOUSE
  2749.     BSET    #3,D0
  2750.     MOVE.L  -48(A4),A6
  2751.     MOVE.L  A3,A0
  2752.     JSR -150(A6)        ; MODIFYIDCMP
  2753. .3: MOVE.L  $56(A3),A2      ; A2=PORT
  2754.     MOVE.L  4.W,A6
  2755.     MOVE.L  A2,A0
  2756.     JSR -372(A6)        ; GETMSG
  2757.     TST.L   D0
  2758.     BNE.S   .1
  2759.     RTS
  2760. .1: MOVE.L  D0,A1           ; MES
  2761.     MOVE.L  20(A1),D2
  2762.     JSR -378(A6)        ; REPLY
  2763.     MOVE.L  D2,D0           ; CLASS
  2764.     BTST    #3,D0
  2765.     BEQ.S   .2
  2766.     MOVEQ   #-1,D0
  2767.     RTS
  2768. .2: MOVEQ   #0,D0
  2769.     RTS
  2770. ;*-*
  2771. ;; SetIn
  2772. I_SETIN:
  2773.     MOVE.L  -8(A4),D0
  2774.     MOVE.L  4(A7),D1
  2775.     BEQ.S   .1
  2776.     MOVE.L  D1,-92(A4)
  2777. .1: RTS
  2778. ;*-*
  2779. ;; Throw
  2780. I_THROW:
  2781.     MOVE.L  8(A7),-84(A4)       ; FILL "EXCEPTION" VAR
  2782.     MOVE.L  4(A7),-96(A4)       ; FILL "EXCEPTIONINFO" VAR
  2783.     MOVE.L  -76(A4),D0
  2784.     BEQ.S   .1
  2785.     MOVE.L  D0,A0               ; A0=CODE TO JUMP TO
  2786.     MOVE.L  -80(A4),A7          ; STACK BACK
  2787.     MOVE.L  -88(A4),A5
  2788.     MOVE.L  (A7)+,-88(A4)       ; (A5)
  2789.     MOVE.L  (A7)+,-76(A4)       ; PUT PREVIOUS HANDLER BACK (CODE)
  2790.     MOVE.L  (A7)+,-80(A4)       ; (STACK)
  2791.     JMP (A0)
  2792. .1: MOVE.L  -24(A4),A0          ; PERFORM CLEANUP(0)
  2793.     JMP (A0)
  2794.     RTS
  2795. ;*-*
  2796. ;; ReThrow
  2797. I_RETHROW:
  2798.     TST.L   -84(A4)         ; NO RETHROW() IF EXC=0
  2799.     BEQ.S   .2
  2800.     MOVE.L  -76(A4),D0
  2801.     BEQ.S   .1
  2802.     MOVE.L  D0,A0           ; A0=CODE TO JUMP TO
  2803.     MOVE.L  -80(A4),A7      ; STACK BACK
  2804.     MOVE.L  -88(A4),A5
  2805.     MOVE.L  (A7)+,-88(A4)       ; (A5)
  2806.     MOVE.L  (A7)+,-76(A4)       ; PUT PREVIOUS HANDLER BACK (CODE)
  2807.     MOVE.L  (A7)+,-80(A4)       ; (STACK)
  2808.     JMP (A0)
  2809. .1: MOVE.L  -24(A4),A0      ; PERFORM CLEANUP(0)
  2810.     JMP (A0)
  2811. .2: RTS
  2812. ;*-*
  2813. ;; SelectList
  2814. I_SELECTLIST:
  2815.     MOVE.L  4(A7),A0        ; code
  2816.     MOVE.L  8(A7),A3        ; DESTLIST
  2817.     MOVE.L  A3,A6
  2818.     MOVE.L  12(A7),A1       ; SRClist
  2819.     MOVE.L  16(A7),A2       ; VAR
  2820.     MOVE.W  -2(A1),D2       ; COUNT
  2821.     BEQ.S   .1
  2822.     SUBQ.L  #1,D2
  2823. .XL:MOVE.L  (A1)+,(A2)
  2824.     MOVEM.L D2/A0-A3/A6,-(A7)
  2825.     JSR (A0)
  2826.     MOVEM.L (A7)+,D2/A0-A3/A6
  2827.     TST.L   D0
  2828.     BEQ.S   .2
  2829.     MOVE.L  (A2),(A3)+
  2830.     ADDQ.W  #1,-2(A6)
  2831.     MOVE.W  -4(A6),D0
  2832.     CMP.W   -2(A6),D0
  2833.     BEQ.S   .1
  2834. .2: DBRA    D2,.XL
  2835. .1: MOVE.W  -2(A6),D0
  2836.     EXT.L   D0
  2837.     RTS
  2838. ;*-*
  2839. ;; SetColour
  2840. I_SETCOLOUR:
  2841.     MOVE.L  D3,A3
  2842.     MOVE.L  D4,A2
  2843.     MOVE.L  4(A7),D3
  2844.     MOVE.L  8(A7),D2
  2845.     MOVE.L  12(A7),D1
  2846.     MOVE.L  16(A7),D0
  2847.     MOVE.L  20(A7),A0
  2848.     ADD.W   #44,A0
  2849.     MOVE.L  4.W,A6
  2850.     MOVE.W  20(A6),D4
  2851.     MOVE.L  -52(A4),A6
  2852.     CMP.W   #39,D4
  2853.     BPL.S   .39
  2854.     LSR.L   #4,D1
  2855.     LSR.L   #4,D2
  2856.     LSR.L   #4,D3
  2857.     JSR -$120(A6)
  2858.     MOVE.L  A3,D3
  2859.     MOVE.L  A2,D4
  2860.     RTS
  2861. .39:    MOVEQ   #24,D4
  2862.     LSL.L   D4,D1
  2863.     LSL.L   D4,D2
  2864.     LSL.L   D4,D3
  2865.     JSR -852(A6)
  2866.     MOVE.L  A3,D3
  2867.     MOVE.L  A2,D4
  2868.     RTS
  2869. ;*-*
  2870.  
  2871. ;; NewM
  2872. I_NEWM:
  2873.     MOVE.L  8(A7),D0        ; COPY OF New()
  2874.     MOVE.L  4(A7),D1
  2875.     ADDQ.L  #8,D0
  2876.     MOVE.L  D0,D2
  2877.     MOVE.L  4.W,A6
  2878.     JSR -198(A6)
  2879.     TST.L   D0
  2880.     BEQ.S   .1
  2881.     MOVE.L  D0,A0
  2882.     MOVE.L  -20(A4),(A0)
  2883.     MOVE.L  D2,4(A0)
  2884.     MOVE.L  D0,-20(A4)
  2885.     ADDQ.L  #8,D0
  2886.     RTS
  2887. .1: MOVE.L  #"MEM",-84(A4)      ; COPY OF Raise()
  2888.     MOVE.L  -76(A4),D0
  2889.     BEQ.S   .2
  2890.     MOVE.L  D0,A0
  2891.     MOVE.L  -80(A4),A7
  2892.     MOVE.L  -88(A4),A5
  2893.     MOVE.L  (A7)+,-88(A4)
  2894.     MOVE.L  (A7)+,-76(A4)
  2895.     MOVE.L  (A7)+,-80(A4)
  2896.     JMP (A0)
  2897. .2: MOVE.L  -24(A4),A0
  2898.     JMP (A0)
  2899.     RTS
  2900. ;*-*
  2901.  
  2902. ;; Bounds
  2903. I_BOUNDS:
  2904.     MOVE.L  12(A7),D0       ; D0=VALUE
  2905.     MOVE.L  4(A7),D1        ; D1=HIGHERBOUND FIRST
  2906.     CMP.L   D1,D0
  2907.     BMI.S   .1
  2908.     MOVE.L  D1,D0
  2909.     BRA.S   .X
  2910. .1: MOVE.L  8(A7),D1        ; NOW TRY LOWERBOUND
  2911.     CMP.L   D1,D0
  2912.     BPL.S   .X
  2913.     MOVE.L  D1,D0
  2914. .X: RTS
  2915. ;*-*
  2916. ;; RealF
  2917. I_REALF:
  2918.     MOVE.L  12(A7),A2
  2919.     CLR.W   -2(A2)
  2920.     MOVE.L  8(A7),D2        ; D2=FLOAT
  2921.     MOVE.L  -56(A4),A6
  2922.     MOVE.L  D2,D0
  2923.     JSR -48(A6)
  2924.     BPL.S   .3
  2925.     MOVE.B  #"-",D0
  2926.     BSR.S   .ADDS
  2927.     MOVE.L  D2,D0
  2928.     JSR -54(A6)         ; ABS
  2929.     MOVE.L  D0,D2
  2930. .3: MOVE.L  4(A7),D1
  2931.     LSL.L   #2,D1
  2932.     MOVE.L  .RTAB(PC,D1.L),D1
  2933.     MOVE.L  D2,D0
  2934.     JSR -66(A6)
  2935.     MOVE.L  D0,D2
  2936.     MOVEQ   #-1,D1
  2937.     BSR.W   .ADD
  2938.     CMP.L   #1,4(A7)
  2939.     BMI.S   .DONE
  2940.     MOVE.L  -56(A4),A6
  2941.     MOVE.B  #".",D0
  2942.     BSR.S   .ADDS
  2943.     MOVE.L  D2,D0
  2944.     JSR -90(A6)         ; floor
  2945.     MOVE.L  D0,D1
  2946.     MOVE.L  D2,D0
  2947.     JSR -72(A6)         ; sub
  2948.     MOVE.L  4(A7),D1
  2949.     SUBQ.L  #1,D1
  2950.     LSL.L   #2,D1
  2951.     MOVE.L  .TAB(PC,D1.L),D1
  2952.     JSR -78(A6)         ; mul
  2953.     BSR.S   .ADD
  2954. .DONE:  MOVE.L  12(A7),D0
  2955.     RTS
  2956. .PROC:  MOVE.B  D0,(A3)+
  2957.     RTS
  2958. .ADDS:  MOVE.W  -2(A2),D1
  2959.     CMP.W   -4(A2),D1
  2960.     BPL.S   .1
  2961.     MOVE.B  D0,0(A2,D1.W)
  2962.     CLR.B   1(A2,D1.W)
  2963.     ADDQ.W  #1,-2(A2)
  2964. .1: RTS
  2965. .RTAB:  DC.L    $3f000000,$3d4ccccd,$3ba3d70a   ; okay for 8 digits
  2966.     DC.L    $3a03126f,$3851b717,$36a7c5ac
  2967.     DC.L    $350637bd,$3356bf95,$31abcc77
  2968. .TAB:   DC.L    $41200000,$42c80000,$447a0000   ; same here
  2969.     DC.L    $461c4000,$47c35000,$49742400
  2970.     DC.L    $4b189680,$4cbebc20 ; ,$4cbebc20
  2971. .ADD:   MOVE.L  D1,-(A7)
  2972.     JSR -90(A6)         ; FLOOR
  2973.     JSR -30(A6)         ; FIX, D0=INT
  2974.     MOVE.L  (A7)+,D1
  2975.     LEA -32(A7),A7
  2976.     MOVE.L  A7,A3
  2977.     LEA .PROC(PC),A2
  2978.     LEA 16(A3),A0
  2979.     MOVE.B  #"%",(A0)+
  2980.     TST.L   D1
  2981.     BMI.S   .2
  2982.     MOVE.L  4+4+32(A7),D1
  2983.     ADD.W   #$30,D1
  2984.     MOVE.B  #"0",(A0)+
  2985.     MOVE.B  D1,(A0)+
  2986.     MOVE.B  #".",(A0)+
  2987.     MOVE.B  D1,(A0)+
  2988. .2: MOVE.B  #"l",(A0)+
  2989.     MOVE.B  #"d",(A0)+
  2990.     CLR.B   (A0)+
  2991.     LEA 16(A3),A0
  2992.     LEA 28(A3),A1
  2993.     MOVE.L  D0,(A1)
  2994.     MOVE.L  4.W,A6
  2995.     JSR -522(A6)
  2996.     MOVE.L  4+12+32(A7),A2      ; A2=STRING
  2997.     MOVE.L  A7,A3
  2998. .XL:MOVE.B  (A3)+,D0
  2999.     BEQ.S   .O
  3000.     BSR.W   .ADDS
  3001.     BRA.S   .XL
  3002. .O: LEA 32(A7),A7
  3003.     RTS
  3004. ;*-*
  3005. ;; RealVal
  3006. I_REALVAL:
  3007.     MOVE.L  D3,A3
  3008.     MOVE.L  4(A7),A0        ; A0=STR
  3009. .XL:MOVE.B  (A0)+,D0
  3010.     CMP.B   #33,D0
  3011.     BMI.S   .XL
  3012.     MOVEQ   #0,D1
  3013.     CMP.B   #"-",D0
  3014.     BNE.S   .NNEG
  3015.     MOVEQ   #-1,D1
  3016.     MOVE.B  (A0)+,D0
  3017. .NNEG:  MOVE.W  D1,A6           ; A6=SIGN
  3018.     MOVEQ   #0,D2           ; D2=DOTFLAG
  3019.     MOVEQ   #1,D1           ; D1=DIVDOT
  3020.     MOVEQ   #0,D3           ; D3=RESULT SOFAR
  3021.     SUB.L   A1,A1           ; A1=COUNT
  3022. .L2:    CMP.B   #"9"+1,D0
  3023.     BPL.S   .D
  3024.     CMP.B   #".",D0
  3025.     BEQ.S   .DOT
  3026.     CMP.B   #"0",D0
  3027.     BMI.S   .D
  3028.     EXT.W   D0
  3029.     EXT.L   D0
  3030.     SUB.W   #"0",D0
  3031.     MOVE.L  D3,A2
  3032.     LSL.L   #2,D3
  3033.     ADD.L   A2,D3
  3034.     LSL.L   #1,D3           ; D3*10
  3035.     ADD.L   D0,D3
  3036.     TST.L   D2
  3037.     BEQ.S   .1
  3038.     MOVE.L  D1,A2
  3039.     LSL.L   #2,D1
  3040.     ADD.L   A2,D1
  3041.     LSL.L   #1,D1           ; D1*10
  3042. .1: ADDQ.L  #1,A1
  3043. .N: MOVE.B  (A0)+,D0
  3044.     BRA.S   .L2
  3045. .D: MOVE.L  A1,D0
  3046.     BEQ.S   .FAIL
  3047.     MOVE.L  A0,-(A7)
  3048.     MOVE.L  A6,A2
  3049.     MOVE.L  D1,D0
  3050.     MOVE.L  -56(A4),A6
  3051.     JSR -36(A6)
  3052.     MOVE.L  D0,D2
  3053.     MOVE.L  D3,D0
  3054.     JSR -36(A6)
  3055.     MOVE.L  D2,D1
  3056.     JSR -84(A6)
  3057.     MOVE.L  A2,D1
  3058.     BEQ.S   .2
  3059.     JSR -60(A6)
  3060. .2: MOVE.L  A3,D3
  3061.     MOVE.L  (A7)+,D1
  3062.     SUBQ.L  #1,D1
  3063.     SUB.L   4(A7),D1
  3064.     RTS
  3065. .DOT:   TST.L   D2
  3066.     BNE.S   .D
  3067.     MOVEQ   #1,D2
  3068.     BRA.S   .N
  3069. .FAIL:  MOVEQ   #0,D1
  3070.     MOVEQ   #0,D0
  3071.     RTS
  3072. ;*-*
  3073. ;; Fabs
  3074. I_FABS:
  3075.     MOVE.L  4(A7),D0
  3076.     MOVE.L  -56(A4),A6
  3077.     JSR -54(A6)
  3078.     RTS
  3079. ;*-*
  3080. ;; Floor
  3081. I_FFLOOR:
  3082.     MOVE.L  4(A7),D0
  3083.     MOVE.L  -56(A4),A6
  3084.     JSR -90(A6)
  3085.     RTS
  3086. ;*-*
  3087. ;; Fceil
  3088. I_FCEIL:
  3089.     MOVE.L  4(A7),D0
  3090.     MOVE.L  -56(A4),A6
  3091.     JSR -96(A6)
  3092.     RTS
  3093. ;*-*
  3094. ;; Fsin
  3095. I_FSIN:
  3096.     MOVE.L  4(A7),D0
  3097.     MOVE.L  -60(A4),A6
  3098.     JSR -36(A6)
  3099.     RTS
  3100. ;*-*
  3101. ;; Fcos
  3102. I_FCOS:
  3103.     MOVE.L  4(A7),D0
  3104.     MOVE.L  -60(A4),A6
  3105.     JSR -42(A6)
  3106.     RTS
  3107. ;*-*
  3108. ;; Ftan
  3109. I_FTAN:
  3110.     MOVE.L  4(A7),D0
  3111.     MOVE.L  -60(A4),A6
  3112.     JSR -48(A6)
  3113.     RTS
  3114. ;*-*
  3115. ;; Fexp
  3116. I_FEXP:
  3117.     MOVE.L  4(A7),D0
  3118.     MOVE.L  -60(A4),A6
  3119.     JSR -78(A6)
  3120.     RTS
  3121. ;*-*
  3122. ;; Flog
  3123. I_FLOG:
  3124.     MOVE.L  4(A7),D0
  3125.     MOVE.L  -60(A4),A6
  3126.     JSR -84(A6)
  3127.     RTS
  3128. ;*-*
  3129. ;; Fpow
  3130. I_FPOW:
  3131.     MOVE.L  4(A7),D0
  3132.     MOVE.L  8(A7),D1
  3133.     MOVE.L  -60(A4),A6
  3134.     JSR -90(A6)
  3135.     RTS
  3136. ;*-*
  3137. ;; Fsqrt
  3138. I_FSQRT:
  3139.     MOVE.L  4(A7),D0
  3140.     MOVE.L  -60(A4),A6
  3141.     JSR -96(A6)
  3142.     RTS
  3143. ;*-*
  3144. ;; Flog10
  3145. I_FLOG10:
  3146.     MOVE.L  4(A7),D0
  3147.     MOVE.L  -60(A4),A6
  3148.     JSR -126(A6)
  3149.     RTS
  3150. ;*-*
  3151.  
  3152. ;; FastDispose
  3153. I_FASTDISPOSE:            ; SEE ALSO: FASTDISPOSELIST!!!!!
  3154.     MOVE.L  8(A7),D0        ; parms(ptr,size)
  3155.     BEQ.S   .oute
  3156.     MOVE.L  D0,A0
  3157.     MOVE.L  4(A7),D0
  3158.     CMP.L   #257,D0
  3159.     BPL.S   .free
  3160.     ADDQ.L  #3,D0
  3161.     AND.W   #%1111111100,D0
  3162.     LEA GLOBOFFNEWTAB(A4),A1
  3163.     ADD.L   D0,A1
  3164.     MOVE.L  (A1),(A0)
  3165.     MOVE.L  A0,(A1)
  3166. .oute:  RTS
  3167. .free:  SUBQ.L  #8,A0
  3168.     LEA -20(A4),A1
  3169. .loop:  MOVE.L  (A1),D1
  3170.     BEQ.S   .out
  3171.     MOVE.L  A1,A2           ; ADR TO LINK BACK TO
  3172.     MOVE.L  D1,A1
  3173.     CMPA.L  D1,A0
  3174.     BNE.S   .loop
  3175.     MOVE.L  4(A1),D0        ; MEMSIZE
  3176.     MOVE.L  (A1),(A2)       ; LINK BACK
  3177.     MOVE.L  $4.W,A6
  3178.     JSR -210(A6)        ; FREEMEM
  3179. .out:   RTS
  3180. ;*-*
  3181. ;; FastNew
  3182. I_FASTNEW:
  3183.     MOVE.L  4(A7),D0        ; 1st arg = size 0..
  3184.     CMP.L   #257,D0
  3185.     BPL.S   .mem
  3186.     ADDQ.L  #3,D0
  3187.     AND.W   #%1111111100,D0
  3188.     BEQ.S   .outn
  3189.     MOVE.L  D0,A3
  3190.     LEA GLOBOFFNEWTAB(A4),A0
  3191.     ADD.L   A3,A0
  3192.     MOVE.L  (A0),D0
  3193.     BEQ.S   .chop
  3194.     MOVE.L  D0,A1
  3195.     MOVE.L  (A1),(A0)
  3196.     MOVE.L  A3,D1
  3197.     LSR.W   #2,D1
  3198.     SUBQ.L  #1,D1
  3199.     MOVEQ   #0,D2
  3200. .clrl:  MOVE.L  D2,(A1)+
  3201.     DBRA    D1,.clrl
  3202. .outn:  RTS
  3203. .chop:  MOVE.L  CHOPMEM(A4),D0
  3204.     BEQ.S   .alloc
  3205.     MOVE.L  A3,D1
  3206.     SUB.L   D1,CHOPLEFT(A4)
  3207.     BMI.S   .alloc
  3208.     ADD.L   D1,CHOPMEM(A4)
  3209.     RTS
  3210. .alloc: MOVE.L  #FMEMSIZE+8,D0
  3211.     BSR.S   .al
  3212.     MOVE.L  D0,CHOPMEM(A4)
  3213.     MOVE.L  #FMEMSIZE,CHOPLEFT(A4)
  3214.     BRA.S   .chop
  3215. .mem:   ADDQ.L  #8,D0
  3216. .al:    MOVE.L  D0,D2           ; COPY OF New()
  3217.     MOVE.L  #$10000,D1
  3218.     MOVE.L  $4.W,A6
  3219.     JSR -198(A6)
  3220.     TST.L   D0
  3221.     BEQ.S   .raise
  3222.     MOVE.L  D0,A0
  3223.     MOVE.L  -20(A4),(A0)
  3224.     MOVE.L  D2,4(A0)
  3225.     MOVE.L  D0,-20(A4)
  3226.     ADDQ.L  #8,D0
  3227.     RTS
  3228. .raise: MOVE.L  #"MEM",-84(A4)      ; COPY OF Raise()
  3229.     MOVE.L  -76(A4),D0
  3230.     BEQ.S   .clean
  3231.     MOVE.L  D0,A0
  3232.     MOVE.L  -80(A4),A7
  3233.     MOVE.L  -88(A4),A5
  3234.     MOVE.L  (A7)+,-88(A4)
  3235.     MOVE.L  (A7)+,-76(A4)
  3236.     MOVE.L  (A7)+,-80(A4)
  3237.     JMP (A0)
  3238. .clean: MOVE.L  -24(A4),A0
  3239.     JMP (A0)
  3240. ;*-*
  3241.  
  3242. ;; Min
  3243. I_MIN:
  3244.     MOVE.L  4(A7),D0
  3245.     MOVE.L  8(A7),D1
  3246.     CMP.L   D0,D1
  3247.     BMI.S   .1
  3248.     RTS
  3249. .1: MOVE.L  D1,D0
  3250.     RTS
  3251. ;*-*
  3252. ;; Max
  3253. I_MAX:
  3254.     MOVE.L  4(A7),D0
  3255.     MOVE.L  8(A7),D1
  3256.     CMP.L   D0,D1
  3257.     BPL.S   .1
  3258.     RTS
  3259. .1: MOVE.L  D1,D0
  3260.     RTS
  3261. ;*-*
  3262. ;; OstrCmp
  3263. I_OSTRCMP:
  3264.     MOVEQ   #0,D0
  3265.     MOVE.W  6(A7),D0
  3266.     MOVE.L  8(A7),A1
  3267.     MOVE.L  12(A7),A0
  3268.     ADDQ.L  #1,D0
  3269. .1: SUBQ.L  #1,D0
  3270.     BEQ.S   .3
  3271.     CMPM.B  (A0)+,(A1)+
  3272.     BGT.S   .2
  3273.     BMI.S   .4
  3274.     CMP.B   #0,-1(A0)
  3275.     BNE.S   .1
  3276. .3: MOVEQ   #0,D0
  3277.     RTS
  3278. .2: MOVEQ   #1,D0
  3279.     RTS
  3280. .4: MOVEQ   #-1,D0
  3281.     RTS
  3282. ;*-*
  3283. ;; AstrCopy
  3284. I_ASTRCOPY:
  3285.     MOVEQ   #0,D0
  3286.     MOVE.W  6(A7),D0
  3287.     BEQ.S   .x2
  3288.     MOVE.L  8(A7),A1
  3289.     MOVE.L  12(A7),A0
  3290.     ADDQ.L  #1,D0
  3291. .al:    SUBQ.L  #1,D0
  3292.     BEQ.S   .x
  3293.     MOVE.B  (A1)+,(A0)+
  3294.     BNE.S   .al
  3295.     BRA.S   .x2
  3296. .x: CLR.B   -(A0)
  3297. .x2:    RTS
  3298.  
  3299. ;*-*
  3300.  
  3301. ;; Some shitty comments
  3302. ; Yet Another MileStone:
  3303. ;
  3304. ; Conservative Mark-Sweep Garbage-Collected Lisp-Cells in E
  3305. ;
  3306. ; speed of nrev500_10 test on 128k space (includes 1 collection):
  3307. ;
  3308. ; 4.5 x BinProLog, 15.5 x SBP, 26 x Gofer
  3309. ;
  3310. ; TODO:
  3311. ; + stack checking?
  3312. ; + chunk changable -> own chunksize var. only change if <>0
  3313. ; + DBRA limit? -> now DBL. should be able to do >2meg
  3314. ; + collect delegates? -> no.
  3315. ; + request non-empty mem.
  3316. ; + previous freelist is added ok now in new.
  3317. ; + Cell() function
  3318. ; - multiple args
  3319. ; - special syntax + pattern matching
  3320. ; - Root(x) etc.
  3321. ; - 25% not ideal with small spaces and growing cell usage.
  3322.  
  3323.  
  3324. CELLSMEM    = -108
  3325. CELLSFREE   = -112
  3326. CHUNKSIZE   = -116
  3327. CHUNK       = 128*1024      ; must be multiple of 256, >1024
  3328.  
  3329. ; mem layout:
  3330. ;
  3331. ; OBJECT cellmem
  3332. ;   next:PTR TO cellmem         ; 0
  3333. ;   end:PTR TO cellmem+SIZEOF cellmem   ; 4
  3334. ;   cells[n]:ARRAY OF cell      ; 8
  3335. ; ENDOBJECT
  3336. ;   bits[n]:ARRAY OF BIT
  3337. ;*-*
  3338.  
  3339. ;; Cell
  3340. I_CELL:
  3341.     MOVE.L  4(A7),D0
  3342.     BEQ.S   .false          ; NIL
  3343.     MOVE.L  D0,D1
  3344.     AND.W   #%111,D1
  3345.     BNE.S   .false          ; not cell-aligned
  3346.     MOVE.L  CELLSMEM(A4),A0
  3347. .cloop: CMP.L   A0,D0
  3348.     BMI.S   .cnext          ; lower than bottom
  3349.     CMP.L   4(A0),D0
  3350.     BPL.S   .cnext          ; higher than top
  3351.     MOVEQ   #-1,D0
  3352.     RTS
  3353. .cnext: MOVE.L  (A0),A0
  3354.     MOVE.L  A0,D1
  3355.     BNE.S   .cloop
  3356. .false: MOVEQ   #0,D0
  3357.     RTS
  3358.  
  3359. I_FREECELLS:
  3360.     LEA CELLSFREE(A4),A0
  3361.     MOVEQ   #0,D0
  3362. .ccl:   MOVE.L  (A0),D1
  3363.     BEQ.S   .cco
  3364.     ADDQ.L  #1,D0
  3365.     MOVE.L  D1,A0
  3366.     BRA.S   .ccl
  3367. .cco:   RTS
  3368. ;*-*
  3369. ;; SetChunkSize
  3370. I_SETCHUNKSIZE:
  3371.     TST.L   CHUNKSIZE(A4)
  3372.     BNE.S   .chd
  3373.     MOVE.L  4(A7),D0
  3374.     MOVEQ   #10,D1
  3375.     LSL.L   D1,D0
  3376.     MOVE.L  D0,CHUNKSIZE(A4)
  3377. .chd:   RTS
  3378. ;*-*
  3379. ;; Car                      I
  3380. I_CAR:
  3381.     MOVE.L  4(A7),A0
  3382.     MOVE.L  (A0),D0
  3383.     RTS
  3384. ;*-*
  3385. ;; Cdr                      I
  3386. I_CDR:
  3387.     MOVE.L  4(A7),A0
  3388.     MOVE.L  4(A0),D0
  3389.     RTS
  3390. ;*-*
  3391. ;; FreeChunks
  3392. I_CONS:
  3393.     MOVE.L  CELLSFREE(A4),D0    ; Yep, this is IT!
  3394.     BEQ.S   .gc
  3395.     MOVE.L  D0,A0
  3396.     MOVE.L  (A0),A2
  3397.     MOVE.L  12(A7),(A0)
  3398.     MOVE.L  8(A7),4(A0)
  3399.     MOVE.W  6(A7),D1
  3400.     BEQ.S   .1
  3401.     LSR.W   #2,D1
  3402.     SUBQ.W  #1,D1
  3403.     LEA 16(A7),A1
  3404. .2: MOVE.L  A2,D2
  3405.     BEQ.S   .gc
  3406.     EXG D0,D2
  3407.     MOVE.L  (A2),A3
  3408.     MOVE.L  D2,4(A2)
  3409.     MOVE.L  (A1)+,(A2)
  3410.     MOVE.L  A3,A2
  3411.     DBRA    D1,.2
  3412. .1: MOVE.L  A2,CELLSFREE(A4)
  3413.     RTS
  3414.  
  3415. .gc:    CLR.L   CELLSFREE(A4)
  3416.     MOVE.L  CELLSMEM(A4),D0
  3417.     BEQ .new
  3418.     MOVEM.L D3-D7,-(A7)     ; roots too
  3419.     MOVE.L  D0,D7           ; D7=space
  3420.     MOVE.L  A7,A0           ; A0=roots
  3421. .grab:  CMPA.L  A0,A4           ; grab roots until A4
  3422.     BLE .sweep
  3423.     MOVE.L  (A0)+,D0
  3424.     PEA .grab(PC)
  3425. .trace: BEQ.S   .ex         ; NIL
  3426.     MOVE.L  D0,D1
  3427.     AND.W   #%111,D1
  3428.     BNE.S   .ex         ; not cell-aligned
  3429.     MOVE.L  D7,A2
  3430. .tloop: CMP.L   A2,D0
  3431.     BMI.S   .tnext          ; lower than bottom
  3432.     CMP.L   4(A2),D0
  3433.     BPL.S   .tnext          ; higher than top
  3434.     MOVE.L  D0,A1
  3435.     SUB.L   A2,D0
  3436.     LSR.L   #3,D0
  3437.     MOVE.L  D0,D1
  3438.     LSR.L   #3,D0
  3439.     MOVE.L  4(A2),A3        ; mark the sucker
  3440.     BSET    D1,0(A3,D0.L)       ; already marked? great!
  3441.     BNE.S   .ex
  3442.     MOVE.L  4(A1),-(A7)     ; save cdr for later
  3443.     MOVE.L  A7,D0
  3444.     SUBQ.L  #8,D0
  3445.     CMP.L   -64(A4),D0
  3446.     BMI .raises
  3447.     MOVE.L  (A1),D0         ; go do car now
  3448.     BSR.S   .trace          ; OOPS! stack!!!
  3449.     MOVE.L  (A7)+,D0
  3450.     BRA.S   .trace
  3451. .tnext: MOVE.L  (A2),A2
  3452.     MOVE.L  A2,D1
  3453.     BNE.S   .tloop
  3454. .ex:    RTS
  3455.  
  3456. .sweep: MOVEQ   #0,D0           ; D0=num cells collected
  3457.     MOVE.L  CELLSFREE(A4),A6    ; A6=freelist
  3458. .sl:    MOVE.L  D7,A0           ; A0=space
  3459.     MOVE.L  4(A0),A1        ; A1=endspace
  3460.     MOVE.L  (A0),D5         ; D5=next
  3461.     MOVEQ   #0,D1           ; D1=current bit
  3462. .sloop: ADDQ.L  #8,A0
  3463.     ADDQ.L  #1,D1
  3464.     CMPA.L  A0,A1
  3465.     BEQ.S   .snext
  3466.     MOVE.L  D1,D2
  3467.     LSR.L   #3,D2
  3468.     BCLR    D1,0(A1,D2.L)
  3469.     BNE.S   .sloop
  3470.     ADDQ.L  #1,D0
  3471.     MOVE.L  A6,(A0)         ; sweep the sucker!
  3472.     MOVE.L  A0,A6
  3473.     BRA.S   .sloop
  3474. .snext: MOVE.L  D5,D7
  3475.     BNE.S   .sl
  3476.     MOVE.L  A6,CELLSFREE(A4)
  3477.     MOVEM.L (A7)+,D3-D7
  3478.     MOVE.L  CHUNKSIZE(A4),D1
  3479.     LSR.L   #5,D1           ; /4 = 25% must be empty
  3480.     CMP.L   D1,D0
  3481.     BMI.S   .new
  3482.     BRA I_CONS
  3483.  
  3484. .new:   MOVE.L  CHUNKSIZE(A4),D0
  3485.     BNE.S   .cs
  3486.     MOVE.L  #CHUNK,D0
  3487.     MOVE.L  D0,CHUNKSIZE(A4)
  3488. .cs:    MOVE.L  D0,D1
  3489.     LSR.L   #6,D1           ; markspace
  3490.     ADD.L   D1,D0
  3491.     BSR .alloc
  3492.     MOVE.L  D0,A0
  3493.     MOVE.L  CELLSMEM(A4),(A0)   ; previous cellspace
  3494.     ADD.L   CHUNKSIZE(A4),D0
  3495.     MOVE.L  D0,4(A0)        ; end_of_cells
  3496.     MOVE.L  D0,A2           ; markspace
  3497.     MOVE.L  A0,CELLSMEM(A4)
  3498.     MOVE.L  CHUNKSIZE(A4),D0    ; now chop free cells
  3499.     LSR.L   #5,D0
  3500.     SUBQ.L  #2,D0           ; numcells
  3501.     MOVE.L  CELLSFREE(A4),A1
  3502.     ADDQ.L  #8,A0
  3503.     MOVE.L  A1,(A0)
  3504. .chop:  LEA 8(A0),A1        ; freelist in new cell
  3505.     MOVE.L  A0,(A1)         ; loop unrolled!!!
  3506.     LEA 8(A1),A0        ; 20 cycles per cell!!!
  3507.     MOVE.L  A1,(A0)         ; 4 cells in one loop
  3508.     LEA 8(A0),A1
  3509.     MOVE.L  A0,(A1)
  3510.     LEA 8(A1),A0
  3511.     MOVE.L  A1,(A0)
  3512.     DBRA    D0,.chop
  3513.     SUB.L   #$10000,D0
  3514.     BCC.S   .chop
  3515.     MOVE.L  A0,CELLSFREE(A4)
  3516.     MOVE.L  CHUNKSIZE(A4),D0    ; now clear mark space
  3517.     LSR.L   #8,D0
  3518.     SUBQ.L  #1,D0
  3519.     MOVEQ   #0,D1
  3520. .clmark:MOVE.L  D1,(A2)+
  3521.     DBRA    D0,.clmark
  3522.     SUB.L   #$10000,D0
  3523.     BCC.S   .clmark
  3524.     BRA I_CONS          ; try again!
  3525.  
  3526. .alloc: ADDQ.L  #8,D0
  3527.     MOVE.L  D0,D2           ; COPY OF New()
  3528.     MOVEQ   #0,D1           ; MOVE.L    #$10000,D1
  3529.     MOVE.L  $4.W,A6
  3530.     JSR -198(A6)
  3531.     TST.L   D0
  3532.     BEQ.S   .raise
  3533.     MOVE.L  D0,A0
  3534.     MOVE.L  -20(A4),(A0)
  3535.     MOVE.L  D2,4(A0)
  3536.     MOVE.L  D0,-20(A4)
  3537.     ADDQ.L  #8,D0
  3538.     RTS
  3539.  
  3540. .raises:MOVE.L  #"STCK",-84(A4)
  3541.     BRA.S   .rraise
  3542. .raise: MOVE.L  #"MEM",-84(A4)      ; COPY OF Raise()
  3543. .rraise:MOVE.L  -76(A4),D0
  3544.     BEQ.S   .clean
  3545.     MOVE.L  D0,A0
  3546.     MOVE.L  -80(A4),A7
  3547.     MOVE.L  -88(A4),A5
  3548.     MOVE.L  (A7)+,-88(A4)
  3549.     MOVE.L  (A7)+,-76(A4)
  3550.     MOVE.L  (A7)+,-80(A4)
  3551.     JMP (A0)
  3552. .clean: MOVE.L  -24(A4),A0
  3553.     JMP (A0)
  3554. ;*-*
  3555. ;; FastDisposeList
  3556. I_FASTDISPOSELIST:        ; ALMOST SAME AS FASTDIPOSE!!!!!
  3557.     MOVE.L  4(A7),D0        ; parms(ptr)
  3558.     BEQ.S   .oute
  3559.     MOVE.L  D0,A0
  3560.     MOVE.L  -(A0),D0
  3561.     EXT.L   D0
  3562.     LSL.L   #2,D0
  3563.     ADDQ.L  #4,D0
  3564.     CMP.L   #257,D0
  3565.     BPL.S   .free
  3566.     ADDQ.L  #3,D0
  3567.     AND.W   #%1111111100,D0
  3568.     LEA GLOBOFFNEWTAB(A4),A1
  3569.     ADD.L   D0,A1
  3570.     MOVE.L  (A1),(A0)
  3571.     MOVE.L  A0,(A1)
  3572. .oute:  RTS
  3573. .free:  SUBQ.L  #8,A0
  3574.     LEA -20(A4),A1
  3575. .loop:  MOVE.L  (A1),D1
  3576.     BEQ.S   .out
  3577.     MOVE.L  A1,A2           ; ADR TO LINK BACK TO
  3578.     MOVE.L  D1,A1
  3579.     CMPA.L  D1,A0
  3580.     BNE.S   .loop
  3581.     MOVE.L  4(A1),D0        ; MEMSIZE
  3582.     MOVE.L  (A1),(A2)       ; LINK BACK
  3583.     MOVE.L  $4.W,A6
  3584.     JSR -210(A6)        ; FREEMEM
  3585. .out:   RTS
  3586. ;*-*
  3587.  
  3588. ;; Fatan
  3589. I_FATAN:
  3590.     MOVE.L  4(A7),D0
  3591.     MOVE.L  -60(A4),A6
  3592.     JSR -30(A6)
  3593.     RTS
  3594. ;*-*
  3595. ;; FsinCos
  3596. I_FSINCOS:
  3597.     MOVE.L  8(A7),A0
  3598.     MOVE.L  4(A7),D0
  3599.     MOVE.L  -60(A4),A6
  3600.     JSR -54(A6)
  3601.     RTS
  3602. ;*-*
  3603. ;; FsinH
  3604. I_FSINH:
  3605.     MOVE.L  4(A7),D0
  3606.     MOVE.L  -60(A4),A6
  3607.     JSR 60(A6)
  3608.     RTS
  3609. ;*-*
  3610. ;; FcosH
  3611. I_FCOSH:
  3612.     MOVE.L  4(A7),D0
  3613.     MOVE.L  -60(A4),A6
  3614.     JSR -66(A6)
  3615.     RTS
  3616. ;*-*
  3617. ;; FtanH
  3618. I_FTANH:
  3619.     MOVE.L  4(A7),D0
  3620.     MOVE.L  -60(A4),A6
  3621.     JSR -72(A6)
  3622.     RTS
  3623. ;*-*
  3624. ;; Ftieee
  3625. I_FTIEEE:
  3626.     MOVE.L  4(A7),D0
  3627.     MOVE.L  -60(A4),A6
  3628.     JSR -102(A6)
  3629.     RTS
  3630. ;*-*
  3631. ;; Fieee
  3632. I_FFIEEE:
  3633.     MOVE.L  4(A7),D0
  3634.     MOVE.L  -60(A4),A6
  3635.     JSR -108(A6)
  3636.     RTS
  3637. ;*-*
  3638. ;; Fasin
  3639. I_FASIN:
  3640.     MOVE.L  4(A7),D0
  3641.     MOVE.L  -60(A4),A6
  3642.     JSR -114(A6)
  3643.     RTS
  3644. ;*-*
  3645. ;; Facos
  3646. I_FACOS:
  3647.     MOVE.L  4(A7),D0
  3648.     MOVE.L  -60(A4),A6
  3649.     JSR -120(A6)
  3650.     RTS
  3651. ;*-*
  3652.  
  3653. ;; DoMethod
  3654. I_DOMETHOD:
  3655.     MOVE.L  4(A7),D0
  3656.     MOVE.L  8(A7,D0.L),A2   ; object
  3657.     LEA     8(A7),A1
  3658.     MOVE.L  -4(A2),A0
  3659.     move.l  8(a0),a3
  3660.     JMP     (A3)
  3661. ;*-*
  3662. ;; DoMethodA
  3663. I_DOMETHODA:
  3664.     MOVE.L  8(A7),A2        ; object
  3665.     MOVE.L  -4(A2),A0       ; class
  3666.     MOVE.L  4(A7),A1        ; message
  3667.     move.l  8(a0),a3
  3668.     MOVEM.L D3-D7/A4-a6,-(A7)
  3669.     JSR     (A3)
  3670.     MOVEM.L (A7)+,D3-D7/A4-a6
  3671.     RTS
  3672. ;*-*
  3673. ;; CoerceMethod
  3674. I_CRCMETHOD:
  3675.     MOVE.L  4(A7),D0
  3676.     MOVE.L  8(A7,D0),A2     ; object
  3677.     MOVE.L  12(A7,D0),A0    ; class
  3678.     LEA     8(A7),A1        ; message
  3679.     move.l  8(a0),a3
  3680.     MOVEM.L D3-D7/A4-a6,-(A7)
  3681.     JSR     (A3)
  3682.     MOVEM.L (A7)+,D3-D7/A4-a6
  3683.     RTS
  3684. ;*-*
  3685. ;; CoerceMethodA
  3686. I_CRCMETHODA:
  3687.     MOVE.L  8(A7),A2    ; object
  3688.     MOVE.L  12(A7),A0   ; class
  3689.     MOVE.L  4(A7),A1    ; message
  3690.     move.l  8(a0),a3
  3691.     MOVEM.L D3-D7/A4-a6,-(A7)
  3692.     JSR     (A3)
  3693.     MOVEM.L (A7)+,D3-D7/A4-a6
  3694.     RTS
  3695. ;*-*
  3696. ;; DoSuperMethod
  3697. I_DOSMETHOD:
  3698.     MOVE.L  4(A7),D0
  3699.     LEA     8(A7),A1
  3700.     MOVE.L  8(A7,D0),A2
  3701.     MOVE.L  12(A7,D0),A0
  3702.     MOVE.L  24(A0),A0
  3703.     MOVE.L  8(A0),A3
  3704.     JMP     (A3)
  3705. ;*-*
  3706. ;; DoSuperMethodA
  3707. I_DOSMETHODA:
  3708.     MOVE.L  4(A7),A1    ; message
  3709.     MOVE.L  8(A7),A2    ; object
  3710.     MOVE.L  12(A7),A0   ; class
  3711.     move.l  24(a0),a0
  3712.     MOVE.L  8(a0),a3
  3713.     JMP     (A3)
  3714. ;*-*
  3715. ;; Set
  3716. I_SET:
  3717.     MOVE.L  -48(A4),A6
  3718.     MOVE.L  4(A7),D0
  3719.     MOVE.L  8(A7,D0),A0
  3720.     LEA     8(A7),A1
  3721.     JMP     -648(A6)
  3722. ;*-*
  3723. ;; Sets
  3724. I_SETS:
  3725.     MOVE.L  -48(A4),A6
  3726.     LEA     .T(PC),A1
  3727.     MOVE.L  4(A7),4(A1)
  3728.     MOVE.L  8(A7),(A1)
  3729.     MOVE.L  12(A7),A0
  3730.     JMP     -648(A6)
  3731. .T: DC.L    0,0,0
  3732. ;*-*
  3733. ;; Get
  3734. I_GET:
  3735.     MOVE.L  -48(A4),A6
  3736.     MOVE.L  4(A7),A1
  3737.     MOVE.L  8(A7),D0
  3738.     move.l  12(A7),A0
  3739.     JMP     -654(A6)
  3740. ;*-*
  3741. ;; Gets
  3742. I_GETS:
  3743.     MOVE.L  -48(A4),A6
  3744.     LEA     .T(PC),A1
  3745.     MOVE.L  4(A7),D0
  3746.     MOVE.L  8(A7),A0
  3747.     JSR     -654(A6)
  3748.     MOVE.L  .T(PC),D0
  3749.     RTS
  3750. .T: DC.L    0
  3751. ;*-*
  3752. ;; CtrlD
  3753. I_CTRLD:
  3754.     MOVEQ   #0,D0
  3755.     MOVEQ   #0,D1
  3756.     MOVE.L  4.W,A6
  3757.     JSR -306(A6)
  3758.     BTST    #13,D0
  3759.     BEQ.S   .1
  3760.     MOVEQ   #0,D0
  3761.     MOVE.L  #8192,D1
  3762.     JSR -306(A6)
  3763.     MOVEQ   #-1,D0
  3764.     RTS
  3765. .1: MOVEQ   #0,D0
  3766.     RTS
  3767. ;*-*
  3768. ;; CtrlE
  3769. I_CTRLE:
  3770.     MOVEQ   #0,D0
  3771.     MOVEQ   #0,D1
  3772.     MOVE.L  4.W,A6
  3773.     JSR -306(A6)
  3774.     BTST    #14,D0
  3775.     BEQ.S   .1
  3776.     MOVEQ   #0,D0
  3777.     MOVE.L  #16384,D1
  3778.     JSR -306(A6)
  3779.     MOVEQ   #-1,D0
  3780.     RTS
  3781. .1: MOVEQ   #0,D0
  3782.     RTS
  3783. ;*-*
  3784. ;; CtrlF
  3785. I_CTRLF:
  3786.     MOVEQ   #0,D0
  3787.     MOVEQ   #0,D1
  3788.     MOVE.L  4.W,A6
  3789.     JSR -306(A6)
  3790.     BTST    #15,D0
  3791.     BEQ.S   .1
  3792.     MOVEQ   #0,D0
  3793.     MOVE.L  #32768,D1
  3794.     JSR -306(A6)
  3795.     MOVEQ   #-1,D0
  3796.     RTS
  3797. .1: MOVEQ   #0,D0
  3798.     RTS
  3799. ;*-*
  3800. ;; Chk
  3801. I_CHK:
  3802.     MOVEQ   #0,D0
  3803.     TST.L   4(A7)
  3804.     BEQ.S   .1
  3805.     MOVEQ   #-1,D0
  3806. .1: RTS
  3807. ;*-*
  3808. ;; Eof
  3809. I_EOF:
  3810.     move.l  4(a7),d1
  3811.     movem.l d3-d7,-(a7)
  3812.     move.l  -44(a4),a6
  3813.     move.l  d1,d7
  3814.     moveq   #0,d2
  3815.     moveq   #1,d3
  3816.     jsr     -66(a6)         ; seek to end
  3817.     move.l  d0,d6
  3818.     move.l  d0,d2
  3819.     moveq   #-1,d3
  3820.     move.l  d7,d1
  3821.     jsr     -66(a6)         ; and back again
  3822.     cmp.l   d0,d6
  3823.     seq     d0
  3824.     ext.w   d0
  3825.     ext.l   d0
  3826.     movem.l (a7)+,d3-d7
  3827.     rts
  3828. ;*-*
  3829. ;; Fopen
  3830. I_FOPEN:
  3831.     MOVE.L  4(A7),D2            ; mode
  3832.     MOVE.L  8(A7),D1            ; name
  3833.     MOVE.L  -44(A4),A6          ; dosbase
  3834.     JSR     -30(A6)             ; open
  3835.     tst.l   d0
  3836.     bne     .ok
  3837.     rts
  3838. .ok:
  3839.     MOVE.L  d0,-(a7)            ; fh
  3840.  
  3841.     move.l  -40(a4),a6
  3842.     moveq   #8,d0
  3843.     moveq   #1,d1
  3844.     jsr     -198(a6)
  3845.     tst.l   d0
  3846.     beq     .close
  3847.     move.l  d0,a0
  3848.     move.l  -128(a4),(a0)
  3849.     move.l  (a7),4(a0)
  3850.     move.l  a0,-128(a4)
  3851.     move.l  (a7)+,d0
  3852.     rts
  3853.  
  3854. .close:
  3855.     move.l  (a7)+,d1
  3856.     move.l  -44(a4),a6
  3857.     jsr     -36(a6)
  3858.     moveq   #0,d0
  3859.     rts
  3860.  
  3861. ;*-*
  3862. ;; Fclose
  3863. I_FCLOSE:
  3864.     move.l  4(a7),d1
  3865.     move.l  -128(a4),a0
  3866.     lea     -128(a4),a1
  3867.  
  3868. .c: move.l  a0,d0
  3869.     beq     .k
  3870.     cmp.l   4(a0),d1
  3871.     beq     .cl
  3872.     move.l  a0,a1
  3873.     move.l  (a0),a0
  3874.     bra     .c
  3875. .k: moveq   #0,d0
  3876.     rts
  3877. .cl:move.l  (a0),(a1)   ; unchain
  3878.     move.l  d1,-(a7)
  3879.     move.l  -40(a4),a6
  3880.     move.l  a0,a1
  3881.     moveq   #8,d0
  3882.     jsr     -210(a6)
  3883.     move.l  (a7)+,d1
  3884.     move.l  -44(a4),a6
  3885.     jsr     -36(a6)
  3886.     moveq   #0,d0
  3887.     rts          
  3888. ;*-*
  3889. ;; Alloc
  3890. I_ALLOC:
  3891.     MOVE.L  -120(A4),A0
  3892.     MOVe.L  4(A7),D0
  3893.     ADDQ.L  #4,D0
  3894.     MOVE.L  D0,D2
  3895.     MOVE.L  $4.W,A6
  3896.     JSR     -708(A6)
  3897.     MOVE.L  D0,A0
  3898.     MOVE.L  D2,(A0)+
  3899.     MOVE.L  A0,D0
  3900.     RTS
  3901. ;*-*
  3902. ;; Free
  3903. I_FREE:
  3904.     MOVE.L  4(A7),A1
  3905.     MOVE.L  -(A1),D0
  3906.     MOVE.L  -120(A4),A0
  3907.     MOVE.L  $4.W,A6
  3908.     JSR     -714(A6)
  3909.     RTS
  3910. ;*-*
  3911. ;; PutF
  3912. I_PUTF:
  3913. .3: LEA 8(A7),A1
  3914.     MOVE.L  4(A7),D0
  3915.     MOVE.L  8(A7,D0.L),A0
  3916.     LEA     .1(PC),A2
  3917.     MOVE.L  4.W,A6
  3918.     MOVE.L  -64(A4),A3
  3919.     MOVE.L  A3,D2
  3920.     JSR     -522(A6)
  3921.     MOVE.L  D2,A0
  3922. .5: TST.B   (A0)+
  3923.     BNE .5
  3924.     SUB.L   D2,A0
  3925.     MOVE.L  D3,A3           ; BACKUP
  3926.     MOVE.L  A0,D3
  3927.     SUBQ.L  #1,D3
  3928.     MOVE.L  -44(A4),A6
  3929.     MOVE.L  4(A7),D0
  3930.     MOVE.L  12(A7,D0),D1
  3931.     JSR     -48(A6)
  3932.     MOVE.L  D3,D0
  3933.     MOVE.L  A3,D3
  3934.     RTS
  3935. .1: MOVE.B  D0,(A3)+        ; RDF DUMP
  3936.     RTS
  3937. ;*-*
  3938. ;; ReadB
  3939. I_READB:
  3940.     MOVE.L  D3,A3
  3941.     MOVE.L  16(A7),D1
  3942.     MOVE.L  12(A7),D0
  3943.     MOVEQ   #0,D2
  3944.     MOVE.L  8(A7),D3
  3945.     SUBQ.L  #1,D3
  3946.  
  3947. .LP:ADD.L   D0,D2
  3948.     DBF     D3,.LP
  3949.  
  3950.     MOVE.L  -44(A4),A6
  3951.     MOVE.L  4(A7),D3
  3952.     EXG     D2,D3
  3953.     JSR     -42(A6)
  3954.  
  3955.     MOVEQ   #-1,D1
  3956.     MOVE.L  12(A7),D2
  3957. .LD:ADDQ.L  #1,D1
  3958.     SUB.L   D2,D0
  3959.     BPL     .LD
  3960.     MOVE.L  D1,D0
  3961.     MOVE.L  A3,D3
  3962.     RTS
  3963. ;*-*
  3964. ;; WriteB
  3965. I_WRITEB:
  3966.     MOVE.L  D3,A3
  3967.     MOVE.L  16(A7),D1
  3968.     MOVE.L  12(A7),D0
  3969.     MOVEQ   #0,D2
  3970.     MOVE.L  08(A7),D3
  3971.     SUBQ.L  #1,D3
  3972.  
  3973. .LP:ADD.L   D0,D2
  3974.     DBF     D3,.LP
  3975.  
  3976.     MOVE.L  -44(A4),A6
  3977.     MOVE.L  04(A7),D3
  3978.     EXG     D2,D3
  3979.     JSR     -48(A6)
  3980.  
  3981.     MOVEQ   #-1,D1
  3982.     MOVE.L  12(A7),D2
  3983. .LD:ADDQ.L  #1,D1
  3984.     SUB.L   D2,D0
  3985.     BPL     .LD
  3986.     MOVE.L  D1,D0
  3987.     MOVE.L  A3,D3
  3988.     RTS
  3989. ;*-*
  3990. ;; Size
  3991. I_SIZE:
  3992.     MOVE.L  4(A7),D1
  3993.     MOVE.L  D3,A3
  3994.     MOVEQ   #0,D2
  3995.     MOVEQ   #1,D3
  3996.     MOVE.L  -44(a4),A6
  3997.     JSR     -66(a6)
  3998.  
  3999.     move.l  4(a7),d1
  4000.     move.l  d0,d2
  4001.     moveQ   #-1,d3
  4002.     jsr     -66(a6)
  4003.     move.l  a3,d3
  4004.     rts
  4005. ;*-*
  4006. ;; Lsl
  4007. I_LSL:
  4008.     MOVE.L  4(A7),D1
  4009.     MOVE.L  8(A7),D0
  4010.     LSL.L   D1,D0
  4011.     RTS
  4012. ;*-*
  4013. ;; Lsr
  4014. I_LSR:
  4015.     MOVE.L  4(A7),D1
  4016.     MOVE.L  8(A7),D0
  4017.     LSR.L   D1,D0
  4018.     RTS
  4019. ;*-*
  4020. I_CODEEND:
  4021.     NOP
  4022.  
  4023. ;xxx:
  4024. ;   lea .1(pc),a0
  4025. ;   HASH    a0,d0,d1
  4026. ;   rts
  4027. ;.1:    dc.b    "left",0,0
  4028. ;*-*
  4029. ;; Patch codes
  4030. ;; PrintF (37+)
  4031. I_PRINTF37:
  4032.     MOVE.L  D3,A3
  4033.     MOVE.L  -8(A4),D1
  4034.     MOVE.L  4(A7),D0
  4035.     MOVE.L  8(A7,D0),D2
  4036.     MOVE.L  A7,D3
  4037.     ADDQ.L  #8,D3
  4038.     MOVE.L  -44(a4),A6
  4039.     JSR     -354(A6)
  4040.     MOVE.L  -8(A4),D1
  4041.     JSR     -360(A6)
  4042.     MOVE.L  A3,D3
  4043.     RTS
  4044. I_PRINTF37_E:
  4045. ;*-*
  4046. ;; PutF (37+)
  4047. I_PUTF37:
  4048.     MOVE.L  D3,A3
  4049.     MOVE.L  4(A7),D0
  4050.     MOVE.L  8(A7,D0),D2
  4051.     MOVE.L  12(A7,D0),D1
  4052.     MOVE.L  A7,D3
  4053.     ADDQ.L  #8,D3
  4054.     MOVE.L  -44(a4),A6
  4055.     JSR     -354(A6)
  4056.     MOVE.L  -8(A4),D1
  4057.     JSR     -360(A6)
  4058.     MOVE.L  A3,D3
  4059.     RTS
  4060. I_PUTF37_E:
  4061. ;*-*
  4062. ;; Long (020+)
  4063. I_LONG020:
  4064.     MOVE.L  ([4.W,A7]),D0
  4065.     RTS
  4066. ;*-*
  4067. ;; Int (020+)
  4068. I_INT020:
  4069.     MOVEQ   #0,D0
  4070.     MOVE.W  ([4.W,A7]),D0
  4071.     RTS
  4072. ;*-*
  4073. ;; Char (020+)
  4074. I_CHAR020:
  4075.     MOVEQ   #0,D0
  4076.     MOVE.B  ([4.W,A7]),D0
  4077.     RTS
  4078. ;*-*
  4079. I_PATCHEND:
  4080. ;*-*
  4081.  
  4082.  
  4083.  
  4084.